'='附近的语法错误sp_executesql
问题描述:
我需要delete
所有rows
在一些table
where
值是空字符串(我有多个表名称相似)。'='附近的语法错误sp_executesql
我tryed执行这些SQL语句是字符串:
DECLARE @sql AS NVARCHAR(MAX)
DECLARE @emptyValue AS NVARCHAR(1) =''
set @sql = N'DELETE FROM SampleTable WHERE Value='[email protected]+''
exec sp_executesql @sql
但它把我的错误Msg 102, Level 15, State 1, Line 1 Incorrect syntax near '='.
我tryed现在弄明白大约一个小时。 任何帮助,将不胜感激。
编辑: 这是我删除最后一个配额后得到的。 @tableName
是nvarchar(MAX)
。
答
而不是做字符串连接,parameterize调用sp_executesql
,SQL注入和其他原因(包括缓存查询计划,而不必担心约:-)转义引号:
DECLARE @sql AS NVARCHAR(MAX);
DECLARE @emptyValue AS NVARCHAR(1) ='';
set @sql = N'DELETE FROM SampleTable WHERE [email protected]';
exec sp_executesql @sql, N'@emptyValue NVARCHAR(1)', @emptyValue = @emptyValue;
答
你有两个报价:
set @sql = N'DELETE FROM SampleTable WHERE Value='[email protected]+''
将其更改为:
set @sql = N'DELETE FROM SampleTable WHERE Value='[email protected]
答
如果可以的话,我会跟StuartLC's answer去 - 参数显然是要走的路。
只是为了告诉你如果你别无选择,只能这样做,你可以逃避单引号。引号是必需的,因为“值”列显示为字符串(由问题中的默认值设置为@emptyValue
推断)。
要转义单引号,您需要另一个单引号。试试这个:
DECLARE @sql AS NVARCHAR(MAX)
DECLARE @emptyValue AS NVARCHAR(1) = ''
set @sql = N'DELETE FROM SampleTable WHERE Value='''[email protected]+''''
exec sp_executesql @sql
注意你总是可以PRINT @sql
看到剧本,而不是一味地试图运行它。
如果他必须使用exec,那么这是最好的办法。 –