使用参数

时间:2016-11-24 18:37:41

标签: sql-server openquery sp

我在SQL Server 2014中有一个数据库,我有一个链接服务器。 我想运行一个在她的存储过程中运行的sp 属于链接服务器。

例如,我已经获得了存储过程:

PROCEDURE test (@myint  int) 
AS 
      DECLARE @Query VARCHAR(2000)
      SET @Query = 'INSERT INTO mytable SELECT * FROM OPENQUERY([mylinkedserver], ''EXEC  [linkedserverdb].[dbo].[linkedserversp]  
    '+ @myint + '  '')'

       EXEC(@Query)

当我运行存储的程序test 42时,我收到了错误消息:

  

转换varchar值' INSERT INTO mytable SELECT * FROM OPENQUERY([mylinkedserver],' EXEC [linkedserverdb]。[dbo]。[linkedserversp]'到数据类型int时转换失败

请注意,我尝试将myint从存储的proedure传递给需要该int的linkedserver存储过程。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

PROCEDURE test (@myint  int) AS 
DECLARE @Query VARCHAR(2000)
SET @Query = 'INSERT INTO mytable SELECT * FROM OPENQUERY([mylinkedserver], ''EXEC  [linkedserverdb].[dbo].[linkedserversp]  
'+ CAST(@myint AS VARCHAR(10)) + ''')'

EXEC(@Query)

您正在尝试将INT @myint与字符'exec...'连接起来,您必须将@myint转换为兼容的字符类型,例如VARCHAR