SQL 服务器错误: "Incorrect syntax near 'xyz'"



尝试在SQL Server 2016中使用存储过程将值插入表中时出现此错误。我正在使用动态 SQL:

SET @InsertIntoTable = 'INSERT INTO ' + @TableName + 
'VALUES (' + @Param1 + 
',' + @Param2 +
',' + @Param3 +
',' + @Param4 +
',' + @Param5 +
',' + @Param6 +
',' + @Param7 + ')'

当我想在 @Param3 中插入一个值时,会发生错误,其中我正在传入一个十六进制字符串(例如字符串"24A673C87B11AE1D8F50765E86270FA0546F241F499868"(。

该错误表示"A673C87B11AE1D8F50765E86270FA0546F241F499868"处的语法不正确(这与我上面提供的示例的错误完全不同,它只是原始字符串的子字符串,而不是整个字符串(。我正在传递用于@Param3、@Param4和@Param5的十六进制字符串

理想情况下,您应该使用sp_executesql但要解决您遇到的问题,您应该执行以下操作:

SET @InsertIntoTable = 'INSERT INTO ' + @TableName + 
' VALUES (''' + @Param1   --<-- space before Values 
+ ''', ''' + @Param2 
+ ''', ''' + @Param3 
+ ''', ''' + @Param4 
+ ''', ''' + @Param5
+ ''', ''' + @Param6
+ ''', ''' + @Param7 
+ ''')'

若要将sp_executesql与参数化查询一起使用,请执行以下操作,它还可以保护您免受 SQL 注入攻击。

Declare @Sql NVARCHAR(MAX);
SET @sql = N' INSERT INTO ' + QUOTENAME(@TableName) 
+ N' VALUES (    @Param1 
, @Param2 
, @Param3 
, @Param4 
, @Param5
, @Param6
, @Param7);'
Exec sp_executesql   @sql 
, N'@Param1 [datatype] , @Param2 [datatype], @Param3 [datatype]....'
, @Param1 
, @Param2 
, @Param3 
, @Param4 
, @Param5
, @Param6
, @Param7;

最新更新