将sybase存储过程作为链接服务器过程sql server 2008执行

Posted

技术标签:

【中文标题】将sybase存储过程作为链接服务器过程sql server 2008执行【英文标题】:Execute sybase stored procedure as linked server procedure sql server 2008 【发布时间】:2011-02-22 16:22:45 【问题描述】:

编辑


最终目标是使用来自 SQL Server 2008 的输入和输出参数通过链接服务器调用托管在 sybase 中的存储过程


我觉得标题很清楚。

我的目标是通过我已经创建的链接服务器在 SQL Server 2008 中执行托管在 Sybase SQL Anywhere 8 中的存储过程。

通过链接服务器进行的任何 SQL 查询都有效。 另外我能够执行一个函数,但我现在不知道如何获得这样的返回值

EXEC ('CALL "dbname"."procedurename"(''param1'', ''param2'', ''param3'')') AT LinkedServerAlias;

感谢 4 的所有帮助!

毛罗

【问题讨论】:

这可能会有所帮助***.com/questions/13741175/… 【参考方案1】:

你能使用四部分命名约定吗?

喜欢

exec LinkedServerName.dbname.dbo.procedurename @param1, @param2, @param3

【讨论】:

链接服务器“LinkedServerName”的 OLE DB 提供程序“MSDASQL”返回消息“[Sybase][ODBC 驱动程序][Adaptive Server Anywhere]语法错误或访问冲突:在 ... 中接近 '1'” ;[1](?,?,?,?)". 仅适用于 SQL Server 链接服务器【参考方案2】:

我终于可以通过调用来做到这一点

SELECT * FROM OPENQUERY([LinkedServer], 'SELECT "dbname"."spname"(@p1,@p2, @p3)')

我会尽快添加 cmets 和示例。

【讨论】:

【参考方案3】:

4 部分对象名称仅对 SQL Server 链接服务器有效。

您必须将您的 EXEC 放在 OPENQUERY 中

SELECT * FROM OPENQUERY([LinkedServer], 'EXEC MyDB.MyScheme.MyProc.spname @p1, @p2, @p3')

现在,您无法对 OPENQUERY 调用进行参数化,因此您可以使用动态 SQL

DECLARE @sql nvarchar(4000), @linkedsql nvarchar(4000)

SET @sql = 'EXEC MyDB.MyScheme.MyProc.spname ' + CAST(@p1value as int) + ...
SET @linkedsql = 'SELECT * FROM OPENQUERY(LinkedServer, ''' + @sql + ''')'

EXEC (@linkedsql)

【讨论】:

以上是关于将sybase存储过程作为链接服务器过程sql server 2008执行的主要内容,如果未能解决你的问题,请参考以下文章

Sybase SQL Anywhere:LOAD TABLE 函数是不是在存储过程中工作?

sybase 如何像SQL SERVER一样建立作业,让他能定时运行存储过程

如何使用 JDBC 调用带有命名参数的 Sybase 存储过程

一个存储过程中调用另一个存储过程的问题(sybase数据库)

使用存储过程的 s-s-rS 报告

Sybase·调用存储过程并返回结果