【问题标题】:Execute sybase stored procedure as linked server procedure sql server 2008将sybase存储过程作为链接服务器过程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 的所有帮助!

毛罗

【问题讨论】:

标签: sql sql-server tsql linked-server sybase-asa


【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-19
      • 2012-07-02
      • 1970-01-01
      • 2015-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      相关资源
      最近更新 更多