2

SQLサーバーでSPを作成しています

ALTER PROCEDURE [dbo].[spAddUserBadge]
AS
BEGIN
    INSERT INTO dbo.SE_UserBadge
    (    
        [UID],
        BadgeID,
        BadgeAssignmentOrRenewalDate,
        BadgeExpiryDate ,
        AmountPaid, 
        Remarks ,
        AssignedBy          
    )
    VALUES
    (
        17,1, 12-12-2012, 12-12-2013, 0.00, '', ''
    )

    SELECT SCOPE_IDENTITY() AS id    
END
GO

SCOPE_IDENTITYはNULLとして来ています。どこが間違っているの?

4

3 に答える 3

4

OUTPUT演算子を使用して、挿入された値をテーブル変数に出力し、それらをチェックします。

ALTER PROCEDURE [dbo].[spAddUserBadge]
AS
BEGIN
    DECLARE @TBL AS TABLE(ID1 INT, ID2 INT)

    INSERT INTO dbo.SE_UserBadge
    (    
        [UID],
        BadgeID,
        BadgeAssignmentOrRenewalDate,
        BadgeExpiryDate ,
        AmountPaid, 
        Remarks ,
        AssignedBy          
    )
    OUTPUT inserted.ID1, inserted.ID2 INTO @TBL
    VALUES
    (
        17,1, 12-12-2012, 12-12-2013, 0.00, '', ''
    )

    SELECT * FROM @TBL  
END
GO
于 2012-11-05T17:28:03.630 に答える
3

scope_identityは、IDフィールドがある場合にのみ値を返します。IDフィールドがあることを確認してください。

残念ながら、SQLを使用して既存の列をIDフィールドに変更することはできません。これを行うには、ALTER TABLE dbo.SE_UserBadgeADD列名INTIDENTITY(1,1)などを使用して新しい列を作成する必要があります。次に、IDENTITY_INSERTdbo.SE_UserBadgeONとupdateステートメントを使用して既存の値を転送する必要があります。次に、古い列を削除できます。

または、テーブルが大きすぎない場合は、SSMSでデザイナービューを使用できます。

于 2012-11-05T17:19:45.743 に答える
0

私が見ることができるのは、挿入ステートメントで列IDの値を指定していることです。scope_identityを選択してIDを取得する場合は、IDをID主キーとして設定する必要があります。

ここに、テーブルを作成するときのこのサンプルがあります。

CREATE TABLE Person
(
    ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
    Name VARCHAR(20),
    LastName VARCHAR(20),
)

次に、ストアドプロシージャで、IDを指定する必要はありません。これは、自動的に生成されます。

INSERT INTO Person (Name,LastName) VALUES ('YouName','YourLastName')

SELECT SCOPE_IDENTITY() AS ID 

これがあなたのために働くことを願っています。

于 2012-11-05T17:38:17.367 に答える