gpt4 book ai didi

sql-server - 使用动态查询在 openquery 中转义单引号

转载 作者:行者123 更新时间:2023-12-02 23:28:45 25 4
gpt4 key购买 nike

我需要使用参数(例如@PickedDate)从链接服务器检索数据。如果我跳过 @A 和 @B,查询工作正常,但由于缺少单引号,它总是返回错误。请指教,谢谢。

查询:

Declare @OPENQUERY nvarchar(500), @TSQL nvarchar(max), @LinkedServer nvarchar(20), @A varchar(5), @B varchar(5), @PickedDate varchar(8)
Set @PickedDate = '20150501'
Set @A = 'AAA'
Set @B = 'BBB'
Set @LinkedServer = 'LinkedServerName'
Set @OPENQUERY = 'Select * From Openquery('+ @LinkedServer + ','''
Set @TSQL = 'SELECT cases.casenum, user.username, code
From cases
Inner join user
On cases.casenum = user.user_id
Where cases.date_opened > DateAdd(day,1-datepart(dw,Convert(date,' + @PickedDate + ')), Convert(date,' + @PickedDate + '))
And cases.date_opened <= DateAdd(day,8-datepart(dw,Convert(date,' + @PickedDate + ')), Convert(date,' + @PickedDate + '))
And cases.code IN (' + @A +', ' + @B + ')
ORDER BY casenum'')'
Exec (@Openquery+@TSQL)

链接服务器“LinkedServerName”的 OLE DB 提供程序“MSDASQL”返回消息“[Sybase][ODBC 驱动程序][SQL Anywhere]未找到列 'AAA'”。消息 7321,16 级,状态 2,第 1 行准备查询时发生错误“

  SELECT cases.casenum, username, code
From cases
Inner join user
On cases.casenum = user.user_id
Where cases.date_opened >
DateAdd(day,1-datepart(dw,Convert(date,20150501)), Convert(date,20150501))
And cases.date_opened <=
DateAdd(day,8-datepart(dw,Convert(date,20150501)), Convert(date,20150501))
And cases.code IN (AAA, BBB)
ORDER BY casenum"

针对链接服务器“LinkedServerName”的 OLE DB 提供程序“MSDASQL”执行。

最佳答案

您的变量需要用单引号引起来,因为您试图将它们设为字符串文字。但更复杂的是,您尝试在字符串中创建一个 SQL 语句,而该字符串中又包含另一个 SQL 语句。所以你需要让你的行读起来像:

And cases.code IN (''''' + @A +''''', ''''' + @B + ''''')

您需要两组双引号,以便正确解释字符串文字中的字符串文字。啊?正确的。 :)

最终您需要构建一个包含以下有效 SQL 语法的字符串:

Select * From Openquery(LinkedServerName,'SELECT cases.casenum, user.username, code
From cases
Inner join user
On cases.casenum = user.user_id
Where cases.date_opened > DateAdd(day,1-datepart(dw,Convert(date,20150501)), Convert(date,20150501))
And cases.date_opened <= DateAdd(day,8-datepart(dw,Convert(date,20150501)), Convert(date,20150501))
And cases.code IN (''AAA'', ''BBB'')
ORDER BY casenum')

您的内部 SQL 字符串中的 AAA 和 BBB 需要两个引号,因为它也是字符串内的 SQL 代码。因此,您需要两个双引号才能在您正在构建的主字符串中获得双引号。

关于sql-server - 使用动态查询在 openquery 中转义单引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30129864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com