다중 업데이트 트리거에서 여러 행 열거
Nov 19 2020
아래 표와 같은 것이 있습니다.
CREATE TABLE updates (
id INT PRIMARY KEY IDENTITY (1, 1),
name VARCHAR (50) NOT NULL,
updated DATETIME
);
그리고 나는 그것을 다음과 같이 업데이트하고 있습니다.
INSERT INTO updates (name, updated)
VALUES
('fred', '2020-11-11),
('fred', '2020-11-11'),
...
('bert', '2020-11-11');
업데이트 후 트리거를 작성하고 추가 된 모든 이름을 열거하고 각 이름을 다른 테이블에 추가해야하지만 각 이름을 열거하는 방법을 알아낼 수 없습니다.
편집 :-저를 올바른 방향으로 안내해 준 사람들 덕분에 저는 SQL을 거의 알지 못합니다.
내가해야 할 일은 이런 것입니다
- 삽입 된 foreach 이름
- 다른 테이블에서 찾아보고
- '이름'이 수행 한 업데이트 수 검색
- 카운트에 1을 더하다
- 다른 테이블로 다시 업데이트합니다.
지금은 랩톱에 액세스 할 수 없지만 다음과 같은 작업을 수행 할 수 있습니다.
BEGIN
SET @count = (SELECT UCount from OTHERTAB WHERE name = ins.name)
SET @count = @count + 1
UPDATE OTHERTAB SET UCount = @count WHERE name = ins.name
SELECT ins.name
FROM inserted ins;
END
업데이트의 각 이름에 대해 작동합니까?
분명히 나는 집합 기반 SQL 처리에 대해 읽어야 할 것입니다.
도움과 조언에 감사드립니다.
답변
LukaszSzozda Nov 19 2020 at 20:13
사용 inserted및 설정 기반 접근 방식 (루프 필요 없음) :
CREATE TRIGGER trg
ON updates
AFTER INSERT
AS
BEGIN
INSERT INTO tab2(name)
SELECT name
FROM inserted;
END
DaleK Nov 19 2020 at 21:04
편집 내용을 기반으로 다음과 같은 작업을 수행합니다. 기본 설정은 사고 방식이므로 미리 계산할 필요가 없습니다 (실제로는 할 수 없습니다). 같은 테이블에서 계산하는지 다른 테이블에서 계산하는지는 명확하지 않지만 문제를 해결할 수 있다고 확신합니다.
포인트들:
- 삽입 된 테이블을 사용하여 업데이트 할 행 결정
- null 가능성을 고려하여 두 번째 테이블 인 경우 하위 쿼리를 사용하여 새 값을 계산합니다.
실제로 동일한 테이블을 사용하는 경우 작동합니다.
BEGIN
UPDATE OTHERTAB SET
UCount = COALESCE(UCount,0) + 1
WHERE [name] in (
SELECT I.[name]
FROM Inserted I
);
END;
그러나 두 번째 테이블을 사용하는 경우 다음이 작동합니다.
BEGIN
UPDATE OTHERTAB SET
UCount = COALESCE((SELECT UCount+1 from OTHERTAB T2 WHERE T2.[name] = OTHERTAB.[name]),0)
WHERE [name] in (
SELECT I.[name]
FROM Inserted I
);
END;