简体   繁体   English

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

[英]Execute sybase stored procedure as linked server procedure sql server 2008

EDIT 编辑


The final goal is to call a stored procedure hosted in sybase with input and output parameters from SQL Server 2008 via Linked Server 最终目标是通过Linked Server从SQL Server 2008中使用输入和输出参数调用sybase中托管的存储过程。


I think title is pretty clear. 我认为标题很清楚。

My goal is to execute a stored procedure hosted in Sybase SQL Anywhere 8 in SQL Server 2008 through the linked server I already created. 我的目标是通过已经创建的链接服务器执行SQL Server 2008中Sybase SQL Anywhere 8中托管的存储过程。

Any SQL query made through the linked server is working. 通过链接服务器进行的任何SQL查询都可以正常工作。 In addition I was able to execute a function but I don't now how to get the return value like that 另外,我能够执行一个函数,但是现在我不知道如何获得这样的返回值

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

Thanks 4 all your help! 谢谢4所有的帮助!

Mauro 毛罗

can you use four part naming convention? 可以使用四部分命名约定吗?

like 喜欢

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

I was finally able to do it by calling 我终于可以通过打电话来做到这一点

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

I'll add comments and example as soon as I experiment it. 我将在尝试后立即添加评论和示例。

4 part object names are valid only for SQL Server linked servers. 4个部分对象名称仅对SQL Server链接服务器有效。

You have to have your EXEC inside an OPENQUERY 您必须将自己的EXEC放在OPENQUERY中

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

Now, you can't parametrise OPENQUERY calls so you have use dynamic SQL 现在,您无法参数化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)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM