0

编辑


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


我觉得标题很清楚。

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

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

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

谢谢4你的帮助!

毛罗

4

3 回答 3

1

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

喜欢

exec LinkedServerName.dbname.dbo.procedurename @param1, @param2, @param3
于 2011-02-22T20:42:12.493 回答
0

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)
于 2011-03-13T15:11:51.113 回答
0

我终于能够通过调用来做到这一点

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

我会在实验后立即添加评论和示例。

于 2011-03-09T10:32:12.567 回答