将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 存储过程