如何在非自动递增的 table 中找到最后添加的 ID?
How do find the last added ID in a non auto incremented table?
如何获取中最后添加的元素的 ID?通过我在网上的搜索,我发现您可以使用 @@IDENTITY 和 IDENTITY_SCOPE() 但只能在添加 them/being 时使用。我尝试了以下但它不起作用
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 )
)
上面的 tables 只是为了实验 sake.I 我正在尝试,当向产品中添加一个值时 table 自动设置给定产品的所有值存储为零。
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
程序没有work.What我做错了吗?
我错过了什么吗? @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
--> 使用自增和@@identity
的例子
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
结束
如何获取中最后添加的元素的 ID?通过我在网上的搜索,我发现您可以使用 @@IDENTITY 和 IDENTITY_SCOPE() 但只能在添加 them/being 时使用。我尝试了以下但它不起作用
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 )
)
上面的 tables 只是为了实验 sake.I 我正在尝试,当向产品中添加一个值时 table 自动设置给定产品的所有值存储为零。
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
程序没有work.What我做错了吗?
我错过了什么吗? @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
--> 使用自增和@@identity
的例子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
结束