2

Table1 に行を挿入しています。この Table1 の最後の Srno(identity) と Table2 の他の値を挿入しています。これらすべてを 1 つのストアド プロシージャで実行しています。

CREATE PROCEDURE proc_test1 
(
    @MultipleImgsTvp AS testdbtype READONLY,
    @ClaimDetailsTvp AS testdbtype1 READONLY
)
AS BEGIN

    INSERT INTO dbo.Tbl_ClaimDetails (BranchRemark, BrMkrid, BrMkrdt, BAZClaimNo, HORemark, HoMkrid, hoMkrdt, ClaimType, ContactDetails, VendorName)
    SELECT  BranchRemark
        ,   BrMkrid
        ,   GETDATE()
        ,   BAZClaimNo
        ,   HORemark
        ,   HoMkrid
        ,   GETDATE()
        ,   ClaimType
        ,   ContactDetails
        ,   VendorName
    FROM @ClaimDetailsTvp

    DECLARE @id INT = SCOPE_IDENTITY()

    DECLARE @ClaimNo VARCHAR(25)
    SET @ClaimNo = (
        SELECT Em_Branchcdnew
        FROM tbl_xyz
        WHERE Em_empid = (SELECT BrMkrid FROM @ClaimDetailsTvp)
    ) + '/' + LEFT(CONVERT(VARCHAR, GETDATE(), 111), 8) + CONVERT(VARCHAR, @ID)

    UPDATE Tbl_ClaimDetails
    SET ClaimNo = @ClaimNo
    WHERE Srno = @ID

    ----------  
    INSERT INTO Tbl_ClaimImages (img, id, imgname)
        SELECT  img
            ,   id
            ,   imgname
        FROM @MultipleImgsTvp
    ----------  

END

しかし、私は常にIDに0を取得しています。

アップデート

Tbl_ClaimDetails

SrNo(identity) | Remark | BrMkrdt | ...so on

Tbl_ClaimDetails の最後に挿入された SrNo を取得したい

4

2 に答える 2

3

最終的な挿入ステートメントは次のようにしてはいけません:

 INSERT INTO Tbl_ClaimImages (img, id, imgname)
        SELECT  img
            ,   @id
            ,   imgname
        FROM @MultipleImgsTvp

ラージ

于 2013-09-03T08:42:21.697 に答える
1

私があなたを正しく理解していれば、次のようにクエリの OUTPUT セクションを使用できます。

INSERT INTO dbo.Tbl_ClaimDetails (BranchRemark, BrMkrid, BrMkrdt, BAZClaimNo, HORemark, HoMkrid, hoMkrdt, ClaimType, ContactDetails, VendorName)
 OUTPUT inserted.id INTO @ID
    SELECT  BranchRemark
        ,   BrMkrid
        ,   GETDATE()
        ,   BAZClaimNo
        ,   HORemark
        ,   HoMkrid
        ,   GETDATE()
        ,   ClaimType
        ,   ContactDetails
        ,   VendorName
    FROM @ClaimDetailsTvp

OUTPUT セクションでは、insert を使用して、挿入された行データにアクセスできます。

于 2013-09-03T08:35:24.470 に答える