2017-12-20 9 views
2

Iveは何度も何度も参考にしましたが、何も助けになりませんでした。私は最後のID、つまりSCOPE_IDENTITY()をBそれはあなたがあなたのデータベーステーブルのID列を持っている場合は、あなたのテーブルに新しい行を追加するときに、ID値が自動的に生成されSQL Serverのテーブルに挿入する値としてIdentity_Scopeを使用するには

CREATE PROCEDURE dbo.Createletter 

@A INT, 
@B NVARCHAR(50), 
@C NVARCHAR(50), 


AS 

BEGIN; 
    SET NOCOUNT ON; 

    BEGIN; 

    INSERT INTO dbo.Employees (A, B, C) 
    VALUES      (@A, SCOPE_IDENTITY(),@C); 
    END; 

END; 
GO 
+0

どう思いますか?あなたはテーブルの中で最も高いIDを意味しますか?いずれにしても、SCOPE_IDENTITY()(identity_scope()はここにあるとおりではありません)は、ステートメントの最新の挿入から最後のIDを返します。この前に挿入がないため、スコープにIDはありません。 FacultyEmployeeIDの挿入を実行する別のプロシージャはありますか? * this * insertステートメントでその値を返す必要があるように思えます。それが別のスコープであれば、SCOPE_IDENTITY()を別のスコープとして使用することはできません...私は少し明確にする必要があると思います。 –

+0

iveは、自分のプロシージャのinsert文でScope_Identity()を試しましたが、まだNULLになっています。また、挿入の前に手順が表示されていない – Derek

+1

それはあなたの正確な問題です。以前のコメントで述べたように、SCOPE_IDENTITY()はスコープ内の最新のID値を返します。このスコープに他の挿入がないため、返すIdentity値はありません。したがって、「NULL」です。 –

答えて

0

NULL値を返し続けます。 次のように、最後のInsertステートメントに対して作成された値をフェッチすることは可能です。

create table dbo.Employees (
    A int identity(1,1), 
    B nvarchar(50), 
    C nvarchar(50) 
) 

declare @B nvarchar(50), @C nvarchar(50) 
INSERT INTO dbo.Employees (B, C) VALUES (@B, @C); 

select SCOPE_IDENTITY() 

プロシージャは、テーブル内のレコードを作成している場合は、その行のIDENTITYを取得しようとするかもしれない、私は「最後のID」である

関連する問題