2017-09-02 25 views
0

如何獲取最後添加元素的ID?從我在網絡上的搜索中,我發現你可以使用@@ IDENTITY和IDENTITY_SCOPE(),但只有在添加它們時纔可以。我嘗試以下,但它不工作如何在非自動增量表中找到最後添加的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) 
) 

上面的表格僅供sake.I正在嘗試的實驗中,將一個值自動設置指定產品的所有值在產品表時存儲爲零。

 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中,您應該使用MAX()來查找最後添加的ID –

+0

@MattGibson啊,對不起,我沒有注意到這一點。我正在使用sql server – King23

回答

2

我錯過了什麼嗎? @PID不是最後使用的標識嗎? @@ IDENTITY和SCOPE_IDENTITY用於自動遞增標識。您在這裏沒有顯示自動增量,您將身份傳遞給過程。這將在PSKT中插入一行,以保存與STORAGE中的每一行一起傳入的@PID。

- >給出,其中同一性是通過在通過參數

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的身份 – King23

+1

不,@@身份返回最後一個自動遞增的身份。使用自動增量時,您不知道創建了什麼標識。在你的情況下,你知道身份,所以你爲什麼要調用一個函數來獲取它? – LAS

相關問題