谁能给我解释一下下面的表达式有什么问题?我相信我正在使用CONVERT 126正确地转换我的日期,并且我的引号使用char 39正确转义,但我可能错了。
t - sql:
DECLARE @end2 DATETIME2 = GETDATE();
DECLARE @test2 nvarchar(200) = N'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'')
错误:Msg 102, Level 15, State 1
'2023'附近语法错误。
尝试了不同的格式、类型转换等。我不能使用EXEC x..sys.sp_executesql
,因为x
是火鸟,而不是另一个SQL Server。
可以用另一个字符转义'
,即''
。但是你需要对它进行双转义,也就是说,你的最后一个字符串需要有双单引号在你的动态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''')