动态构建sql服务器插入语句插入失败
Dynamically built sql server insert statement fails to insert
我们在验证后动态构建一个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 查询中 window 它看起来像这样:
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)
并且执行成功,请问如何通过应用程序使其成功运行?
像这样使用 @Activities
不会构建动态 SQL 语句。它将语句的静态部分与动态部分结合在一起,这在 SQL 服务器中是不可能的。
您还必须正确制定 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
看看 SqlBulkCopy
或 table 值参数。这些提供了一种从 C# 应用程序将多条记录插入 SQL 数据库的更简洁的方法。
我们在验证后动态构建一个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 查询中 window 它看起来像这样:
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)
并且执行成功,请问如何通过应用程序使其成功运行?
像这样使用 @Activities
不会构建动态 SQL 语句。它将语句的静态部分与动态部分结合在一起,这在 SQL 服务器中是不可能的。
您还必须正确制定 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
看看 SqlBulkCopy
或 table 值参数。这些提供了一种从 C# 应用程序将多条记录插入 SQL 数据库的更简洁的方法。