多次插入的存储过程,如果失败则退出
Stored Procedure for multiple inserts with exiting if one fails
我有一个 EAV table,对于每个单独的属性,我都有一个新行,如下所示:
PersonID AtributeName AtributeValue
-----------------------------------
1 Name John
1 Gender Male
1 Height 170
问题是,如果我想插入一个新人(ID 为 2,姓名为 Jack,男性,身高 180),我需要再插入 3 个,并且有一个或多个可能会失败的更改。我正在考虑将所有这些插入包含在带有参数(ID、姓名、性别、身高等)的存储过程中。
我的问题是,做这样的事情:
CREATE PROCEDURE dbo.InserSubject
@ID int,
@Name varchar(50),
@Gender varchar(50),
@Height int
AS
INSERT INTO Subjects
VALUES (1, 'Name', 'John'),
(1, 'Gender', 'Male'),
(1, 'Height', 170);
其中一个插入失败会失败吗?这种database/table是那种实现方式吗?
CREATE PROCEDURE dbo.InserSubject @ID int, @Name varchar(50), @Gender varchar(50), @ Height int
AS
BEGIN TRY
INSERT into Subjects Values (1,'Name','John'),(1,'Gender','Male'),
(1,'Height',170);
END TRY
BEGIN CATCH
error_message()
END CATCH
我有一个 EAV table,对于每个单独的属性,我都有一个新行,如下所示:
PersonID AtributeName AtributeValue
-----------------------------------
1 Name John
1 Gender Male
1 Height 170
问题是,如果我想插入一个新人(ID 为 2,姓名为 Jack,男性,身高 180),我需要再插入 3 个,并且有一个或多个可能会失败的更改。我正在考虑将所有这些插入包含在带有参数(ID、姓名、性别、身高等)的存储过程中。
我的问题是,做这样的事情:
CREATE PROCEDURE dbo.InserSubject
@ID int,
@Name varchar(50),
@Gender varchar(50),
@Height int
AS
INSERT INTO Subjects
VALUES (1, 'Name', 'John'),
(1, 'Gender', 'Male'),
(1, 'Height', 170);
其中一个插入失败会失败吗?这种database/table是那种实现方式吗?
CREATE PROCEDURE dbo.InserSubject @ID int, @Name varchar(50), @Gender varchar(50), @ Height int
AS
BEGIN TRY
INSERT into Subjects Values (1,'Name','John'),(1,'Gender','Male'),
(1,'Height',170);
END TRY
BEGIN CATCH
error_message()
END CATCH