2017-09-02 4 views
0

最後に追加された要素のIDは、どのようにして取得できますか?ウェブ上での検索から、あなたが@@ IDENTITYとIDENTITY_SCOPE()を使うことができることがわかりました。私は、次のことを試してみましたが、それは上の表は、Productテーブルに値を追加すると、自動的に指定した製品のすべての値を設定すると、ちょうどしようとしていますsake.I実験のためにある自動インクリメントされていないテーブルで最後に追加されたIDはどのようにして見つけられますか?

CREATE TABLE Products 
(PT_ID int PRIMARY KEY, Name nvarchar(20)) 

CREATE TABLE Storage(ST_ID int Primary key,Info nvarchar(20)) 

CREATE TABLE ProductStorageMM 
(ST_ID int CONSTRAINT S_FK FOREIGN KEY REFERENCES Storage(ST_ID), 
PT_ID int CONSTRAINT P_FK FOREIGN KEY REFERENCES Products(PT_ID), 
Status int not null, 
PRIMARY KEY (ST_ID ,PT_ID) 
) 

が動作していませんストレージはゼロになります。

 CREATE PROCEDURE AddingProduct 
    (@PID int ,@NAME nvarchar(20)) 
    AS BEGIN 
    INSERT INTO Products(PT_ID,Name) 
    VALUES(@PID,@NAME) 

    INSERT INTO PSKT (PT_ID,ST_ID,Status) 
    SELECT PTT.PT_ID ,STT.ST_ID,0 
    FROM (SELECT * FROM Storage) AS STT, 
      (SELECT * FROM Products WHERE PT_ID=SCOPE_IDENTITY()) AS PTT; 

END 

この手順は機能しません。何が間違っていますか?

+3

'使用>実施例@@ IDENTITYはMicrosoft SQL Server用です。あなたの質問はMySQLにタグ付けされています。あなたはどちらが実際に使っていますか? –

+0

MySQLでは、最後に追加されたIDを見つけるためにMAX()を使用する必要があります –

+0

@MattGibsonああ、申し訳ありませんでした。私はSQLサーバーを使用しています – King23

答えて

2

何か不足していますか? @PIDは最後に使用されたIDではありませんか? @@ IDENTITYおよびSCOPE_IDENTITYは、自動インクリメントIDに使用されます。ここで自動インクリメントが表示されていない場合は、IDをプロシージャに渡します。これにより、STORAGEのすべての行で渡された@PIDの行がPSKTに挿入されます。

- >アイデンティティをパラメータ

CREATE PROCEDURE AddingProduct 
    (@PID int ,@NAME nvarchar(20)) 
    AS BEGIN 
    INSERT INTO Products(PT_ID,Name) 
    VALUES(@PID, @NAME) 

    INSERT INTO PSKT (PT_ID,ST_ID,Status) 
    SELECT @PID ,STT.ST_ID,0 
    FROM Storage STT 

END 

を通して渡されるコードを考える - 自動インクリメントおよび@@アイデンティティを

CREATE PROCEDURE AddingProduct 
    (@NAME nvarchar(20)) 
    AS BEGIN 
    INSERT INTO Products(Name) --< identity is inserted through auto-increment 
    VALUES(@NAME) 

    set @pid = @@identity --< we need to get the identity created in the previous step for the next step. 

    INSERT INTO PSKT (PT_ID,ST_ID,Status) 
    SELECT @PID ,STT.ST_ID,0 
    FROM Storage STT 

END

+0

自動増分IDなしでIDを使用することが難しい – King23

+1

いいえ、@@ identityは最後に自動増分されたIDを返します。自動インクリメントを使用する場合、作成されたアイデンティティーはわかりません。あなたの場合、あなたはアイデンティティを知っています。なぜそれを得るために関数を呼びたいのですか? – LAS

関連する問題