T-SQL:合并或向上插入子表

时间:2018-07-05 13:03:02

标签: c# sql-server tsql

我有三个表,其数据如以下屏幕截图所示:

enter image description here

我有一个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语句来处理它。请注意,该用户一次只能更改一个用户。

如何更改合并语句以说明角色和用户/角色关联表?

1 个答案:

答案 0 :(得分:0)

您可以按照以下步骤来实现。

  1. 创建一个存储过程,该存储过程将接受使用源和目标连接,插入,更新和删除值所需的所有输入参数。使所有参数可选或为null,以便即使没有输入值也可以运行合并。

  2. 将所有这些值插入表变量中,该变量将与目标表具有相同的列以及相同的数据类型。

  3. 使用实际的源表以及表变量并将其合并,然后在合并逻辑中使用输出。

这将在单个merge语句中满足您的两个要求。即使您输入的列为空,union中的第一个查询也将始终具有足以满足合并逻辑的值。

尝试一下,如果这行不通,我将为您提供sql脚本。在这里,我并不是故意提供sql,因此至少您可以自己阅读和尝试并在sql中编写逻辑。