我有三个表,其数据如以下屏幕截图所示:
我有一个MERGE
表的有效Users
语句,该语句已从C#发送到SQL Server。 MERGE
语句正确地将数据合并到ICS_USERS
表中。 #temp
表也在C#中创建和填充:
MERGE INTO ICS_Users AS Target
USING #temp AS Source ON TARGET.USerID = Source.UserId
WHEN MATCHED THEN
UPDATE
SET TARGET.UserName = Source.UserName, TARGET.Active = Source.Active
WHEN NOT MATCHED THEN
INSERT(UserName, Active, UserInitials)
VALUES(Source.UserName, Source.Active, Source.UserInitials)
我想允许用户为用户添加/更改/删除角色,并发送MERGE
语句来处理它。请注意,该用户一次只能更改一个用户。
如何更改合并语句以说明角色和用户/角色关联表?
答案 0 :(得分:0)
您可以按照以下步骤来实现。
创建一个存储过程,该存储过程将接受使用源和目标连接,插入,更新和删除值所需的所有输入参数。使所有参数可选或为null,以便即使没有输入值也可以运行合并。
将所有这些值插入表变量中,该变量将与目标表具有相同的列以及相同的数据类型。
使用实际的源表以及表变量并将其合并,然后在合并逻辑中使用输出。
这将在单个merge语句中满足您的两个要求。即使您输入的列为空,union中的第一个查询也将始终具有足以满足合并逻辑的值。
尝试一下,如果这行不通,我将为您提供sql脚本。在这里,我并不是故意提供sql,因此至少您可以自己阅读和尝试并在sql中编写逻辑。