我们在验证后动态构建一个sql语句
运行一些代码之后,插件生成的值如下所示:
(1, 1, SYSDATETIME(), null),
(4, 1, SYSDATETIME(), null),
(6, 1, SYSDATETIME(), null),
(8, 1, SYSDATETIME(), null)
有效的SQL语法
然后我们按如下方式使用
IF(@Activities != null)
Begin
INSERT INTO [User].[User_Activities]
(UserId, ActivitieId, DateCreated, DateDeleted)
VALUES
@Activities
END
@Activities是上面动态构建的SQL语句,它会抛出一个错误,说@Activities的语法不正确。
即使在SQL查询窗口中,它看起来像这样:
Insert into [User].User_Activities
(UserId, ActivitieId, DateCreated, DateDeleted)
Values
(1, 1, SYSDATETIME(), null),
(4, 1, SYSDATETIME(), null),
(6, 1, SYSDATETIME(), null),
(8, 1, SYSDATETIME(), null)
并成功执行,如何通过应用程序成功完成此工作?
答案 0 :(得分:1)
查看SqlBulkCopy
或表值参数。这些提供了一种更简洁的方法,可以将多个记录从C#app插入到SQL数据库中。
答案 1 :(得分:0)
像这样使用@Activities
不会构建动态SQL语句。它将语句的静态部分与动态部分组合在一起,这在SQL Server中是不可能的。
您还必须正确制定IF
声明:!=
运算符不能用于与NULL
值进行不等式比较(它永远不会计算为TRUE
)。在这种情况下使用IS NOT NULL
。
您必须使用EXEC
来实现您的目标:
IF(@Activities IS NOT NULL)
BEGIN
EXEC('INSERT INTO [User].[User_Activities]
(UserId, ActivitieId, DateCreated, DateDeleted)
VALUES' + @Activities)
END