多次插入的存储过程,如果失败则退出

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