我需要在一次操作中更新表中的几行。
我通常做的是删除(软删除)所有以前使用相同外键的记录并再次插入所有内容。但这根本不是最优的,现在我的工作实际上涉及必须创建存储过程,我想知道它有一种“标准”方式来执行这种操作。
以这些图片为例:
这是与外键(ParentId
)1:
然后使用相应的界面进行以下更改:
a)在第二行中,列Name
(黄色)已更改
b)删除第三行(红色)
c)第四和第五行(绿色)是新的。因为这些行仅驻留在客户端,所以我没有主键(Id)
这就是我想要的结果:
到目前为止,我已经创建了一个新类型:
IF EXISTS(SELECT * FROM sys.types WHERE name='T_DetailDomain') BEGIN
DROP TYPE dbo.T_DetailDomain;
END;
GO
CREATE TYPE dbo.T_DetailDomain AS TABLE
(
Id INT NOT NULL,
Name VARCHAR (50) NOT NULL,
Abbrev VARCHAR (300) NOT NULL,
ParentId INT NOT NULL
);
GO
这是程序的签名:
CREATE PROC dbo.up_DetailDomain_Update
@pParentId INT,
@pTableDetail dbo.T_DetailDomain READONLY
AS
如您所见,我将所有行作为表值参数(@pTableDetail
)传递。
有没有“标准”的方法可以实现我上面描述的内容?
或者我必须执行三项操作:
感谢。