【问题标题】:How can I use a variable inside OPENQUERY如何在 OPENQUERY 中使用变量
【发布时间】:2016-09-16 11:28:26
【问题描述】:

运行以下代码时出现错误。我相信这与使用的单引号的数量有关。 如何在 OPENQUERY 命令中设置变量?

@declare @myStr varchar(6)
set @myStr = 'Test1'

SELECT *    
FROM OPENQUERY("192.168.1.1",'SET FMTONLY OFF; EXEC spNewTest @Param1 = ''+ @myStr +''')

Click to see the error message

问候, 埃利奥·费尔南德斯

【问题讨论】:

  • 添加错误信息会很有帮助
  • 查看我帖子中的错误信息。
  • @ElioFernandes,根据msdn.microsoft.com/en-us/library/ms188427.aspx,查询字符串不能包含变量。您需要构建整个SELECT...OPENQUERY 语句并使用EXECUTEsp_executesql 执行语句字符串。

标签: sql-server tsql openquery


【解决方案1】:

如果要在字符串中创建单引号,则必须放在两个单引号中。例如: '''this is a string''' 将是一个包含以下内容的字符串: '这是一个字符串'

因此,对于您的问题,您必须将代码更改为:

@declare @myStr varchar(6)
set @myStr = 'Test1'

SELECT *    
FROM OPENQUERY("192.168.1.1",'SET FMTONLY OFF; EXEC spNewTest @Param1 = '''+ @myStr +'''')

【讨论】:

    【解决方案2】:

    我刚刚找到了我的问题的答案,所以我想和你分享一下。

    DECLARE @QUERY VARCHAR(MAX)
    DECLARE @TSQL VARCHAR(100)
    DECLARE @SP VARCHAR(50)
    
    DECLARE @PARAMETERS VARCHAR(MAX)
    DECLARE @PARAM1 VARCHAR(50)
    DECLARE @PARAM2 VARCHAR(50)
    
    SET @TSQL = N'SELECT * FROM OPENQUERY([192.168.1.1], ''SET FMTONLY OFF; '
    SET @SP   = 'EXEC spNewTest '
    
    SET @PARAM1 = '@Type='''+ QUOTENAME('Test','''') + ''''
    SET @PARAM2 = '@Year='''+ QUOTENAME('2016','''') + ''''
    SET @PARAMETERS = @PARAM1 + ', ' + @PARAM2
    
    SET @QUERY = @TSQL + @SP + @PARAMETERS + ''')'
    
    EXECUTE (@QUERY)
    

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-28
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 2022-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多