动态插入sql存储过程

时间:2016-03-22 17:35:14

标签: sql vb.net sql-server-2008

我有关于动态插入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

我似乎无法弄清楚我做错了什么,

提前感谢大家的时间和帮助。

2 个答案:

答案 0 :(得分:0)

您的日期变量应该用单引号括起来,而不是双引号。试试吧,它应该有用。

BUT .....

如果你特别想走这条(不寻常的)道路,我强烈建议在sp_ExecuteSQL中使用参数化查询支持 - 它会为你提供更好的表现,通常更安全的查询。

有关如何将sp_ExecuteSQL用于参数化查询的更多信息,请查看https://msdn.microsoft.com/en-us/library/ms188001.aspx

答案 1 :(得分:0)

如果您需要双引号,请确保QUOTED_IDENTIFIER已开启 即。      SET QUOTED_IDENTIFIER ON;