C#& SQL Server存储过程 - 更新具有多对多关系的实体

时间:2016-03-17 15:45:12

标签: c# sql sql-server tsql stored-procedures

曾经有一个Node实体有一个字段Alias。但是,情况发生了变化,现在我们修改了该数据模型,以便Node可以有多个Aliases,因此,Node现在支持Aliases数组(它反过来创建一个Aliases表,以及一个映射多对多关系的AliasesNodes表。

我的问题是,如何更新我的存储过程以使其支持此操作,以及如何修改调用此存储过程的c#代码?

该程序的要求是,如果Node不存在Alias,则每Node只插入Aliases,仅在不存在的情况下插入,最后创建Alias与其Alias之间的关系。

CREATE TYPE [dbo].[NodeTableType] AS TABLE ( [Id] [int] NOT NULL, [NodeTypeId] [smallint] NOT NULL, [Location] [nvarchar](50) NULL, [DisplayName] [nvarchar](100) NULL, [AccessLevel] [smallint] NOT NULL, [IsEnabled] [bit] NOT NULL, [CreatedOn] [datetime2](7) NULL, [CreatedBy] [nvarchar](150) NULL, [ModifiedOn] [datetime2](7) NULL, [ModifiedBy] [nvarchar](150) NULL, [NativeId] [bigint] NOT NULL, [SourceId] [int] NOT NULL, [Name] [nvarchar](100) NOT NULL, [Alias] [nvarchar](100) NULL ); CREATE PROCEDURE [dbo].[InsertNonExistingNode] (@TableVariable dbo.NodeTableType READONLY) AS BEGIN INSERT INTO NWatchNodes WITH (ROWLOCK) (Id, NodeTypeId, Location, DisplayName, AccessLevel, IsEnabled, CreatedOn, CreatedBy, ModifiedOn, ModifiedBy, NativeId, SourceId, Name, Alias) SELECT t.Id, t.NodeTypeId, t.Location, t.DisplayName, t.AccessLevel, t.IsEnabled, t.CreatedOn, t.CreatedBy, t.ModifiedOn, t.ModifiedBy, t.NativeId, t.SourceId, t.Name, t.Alias FROM @TableVariable t LEFT JOIN NWatchNodes PR WITH (NOLOCK) ON PR.Id = t.Id WHERE PR.ID IS NULL END; 为字段时(存在for tl in ax2.get_xticklabels(): tl.set_rotation(30) 表之前)

OLD 工作存储过程:

>dta
    ids names
1 1001    P1
2 1001    P2
3 1002    P1
4 1003    P2
5 1003    P3
6 1003    P4
7 1004    P1

Diagram

0 个答案:

没有答案