我有关于动态插入sql存储过程的问题,因为我需要插入未知量(动态生成),
以下是它的编写方式:
@Parameter as nvarchar(Max),
@SQLQuery as nvarchar(Max)
SET @SQLQuery = 'insert into <table>
(FieldOne,FieldTwo,FieldThree,GeneratedId,dateAdded,addedBy)
values '+@Parameter
EXEC sp_executesql @SQLQuery
当我尝试使用以下值执行此存储过程时:
@Parameter = (1,0,0,12345678123,"2016-03-22 23:26:25",123)
@SQLQuery = null
我甚至尝试(出于愚蠢的原因)尝试以下值:
@Parameter = (1,0,0,12345678123,2016-03-22 23:26:25,123)
@SQLQuery = null
我从SQL Server获得以下错误
Msg 102,Level 15,State 1,Line 3 “23”附近的语法不正确。
(1行受影响)
但实际上没有添加任何行。
我使用的表格如下:
ID (PK and autoincrement)
FieldOne: tinyint
FieldTwo: tinyint
FieldThree: tinyint
GeneratedId: nvarchar(50)
dateAdded: datetime
addedBy: int
我似乎无法弄清楚我做错了什么,
提前感谢大家的时间和帮助。
答案 0 :(得分:0)
您的日期变量应该用单引号括起来,而不是双引号。试试吧,它应该有用。
BUT .....
如果你特别想走这条(不寻常的)道路,我强烈建议在sp_ExecuteSQL中使用参数化查询支持 - 它会为你提供更好的表现,通常更安全的查询。
有关如何将sp_ExecuteSQL用于参数化查询的更多信息,请查看https://msdn.microsoft.com/en-us/library/ms188001.aspx。
答案 1 :(得分:0)
如果您需要双引号,请确保QUOTED_IDENTIFIER已开启 即。 SET QUOTED_IDENTIFIER ON;