Sql server 创建动态sql查询
请参阅以下SQL代码:Sql server 创建动态sql查询,sql-server,tsql,Sql Server,Tsql,请参阅以下SQL代码: DECLARE @MyQuery nvarchar(max) set @MyQuery = 'SELECT TOP 1 @TranslatedMessageOutput = ' + @LanguageName + ' FROM local_translation WHERE English = '+CHAR(39)+CHAR(39)+Convert(nvarchar(50), (s
DECLARE @MyQuery nvarchar(max)
set @MyQuery = 'SELECT TOP 1 @TranslatedMessageOutput =
' + @LanguageName + ' FROM local_translation WHERE English =
'+CHAR(39)+CHAR(39)+Convert(nvarchar(50),
(select English from inserted))
+CHAR(39)+CHAR(39)+CHAR(39)+
' AND [' + @LanguageDateName + '] NOT LIKE ''%1900%'''
如果我为英语输入abc
,这个查询就可以了
但是如果我为英语键入'abc'
,查询将抛出一个错误:
字符串“”后的未闭合引号。“”附近的语法不正确
如何解决此问题?我怀疑您需要转义此查询的输出:
(select English from inserted)
如
在将结果连接到动态SQL语句之前,上面的语句将用'
替换'
。但对于任何动态SQL,我强烈建议您使用绑定值来防止此类SQL语法错误和SQL注入!也就是说,你应该能够写这样的东西:
declare @English;
select @English = English from inserted;
set @MyQuery = 'SELECT TOP 1 @TranslatedMessageOutput =
' + @LanguageName +
' FROM local_translation WHERE English = @English'
' AND [' + @LanguageDateName + '] NOT LIKE ''%1900%''';
-- ...
在动态sql查询中,为了避免混淆,请使用
Char(39)
而不是”
。
例如:
返回
SELECT 'NAME'
SET @T='SELECT '+CHAR(39)+'NAME'+CHAR(39)
SELECT 'NAME'