【问题标题】:Dynamic OPENQUERY with DATETIME criteria具有 DATETIME 条件的动态 OPENQUERY
【发布时间】:2023-01-20 02:04:28
【问题描述】:

有人可以向我解释以下表达式有什么问题吗?我相信那是我正在使用 CONVERT 126 正确转换我的日期,并且我的引号使用 char 39 正确转义,但我可能是错的。

t-sql:

DECLARE @end2 DATETIME2
set @end2 = getdate()
declare @test2 nvarchar(200)
set @test2 = 'select * from openquery(x, '+char(39)+'SELECT OBJID FROM SALE WHERE MODIFIED >= '+char(39)+convert(nvarchar(24),@end2,126)+char(39)+char(39)+')'
print @test2
exec (@test2)

错误:

select * from openquery(x, 'SELECT OBJID FROM SALE WHERE MODIFIED >= '2023-01-19T11:55:21.1233'') 消息 102,级别 15,状态 1,第 121 行 “2023”附近的语法不正确。

尝试了不同的格式、铸造等。

【问题讨论】:

  • 你错过了最后的报价

标签: sql-server tsql openquery


【解决方案1】:

您可以将 ' 字符转义为另一个字符,即 ''。但是你需要双重转义它,即你的最终字符串需要有双单引号才能在你的动态 SQL 中转义,这意味着很多转义,即

DECLARE @end2 DATETIME2
set @end2 = getdate()
declare @test2 nvarchar(200)
set @test2 = 'select * from openquery(x, ''SELECT OBJID FROM SALE WHERE MODIFIED >= '''''+convert(nvarchar(24),@end2,126)+''''''')'
print @test2
exec (@test2)

结果是:

select * 
from openquery(x, 'SELECT OBJID FROM SALE WHERE MODIFIED >= ''2023-01-19T18:06:22.6033''')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-20
    • 2011-12-09
    • 1970-01-01
    • 2023-03-21
    • 2021-10-14
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多