에 마지막으로 추가 된 요소의 ID는 어떻게 얻습니까? 웹 검색에서 @@ IDENTITY 및 IDENTITY_SCOPE ()를 사용할 수 있지만 추가 / 속할 때만 사용할 수 있음을 발견했습니다. 다음을 시도했지만 작동하지 않습니다.
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 )
)
위의 표는 실험을위한 것으로, Product 테이블에 값을 추가 할 때 The storages에있는 해당 제품의 모든 값을 자동으로 0으로 설정하려고합니다.
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
절차가 작동하지 않습니다. 내가 뭘 잘못하고 있습니까?
내가 뭔가를 놓치고 있습니까? @PID가 마지막으로 사용 된 ID가 아닙니까? @@ IDENTITY 및 SCOPE_IDENTITY는 자동 증가 ID에 사용됩니다. 여기서 자동 증가를 표시하지 않고 절차에 ID를 전달합니다. 그러면 STORAGE의 모든 행과 함께 전달 된 @PID에 대한 행이 PSKT에 삽입됩니다.
-> 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 @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
종료
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다