SQL Server 데이터베이스에 구성 테이블이 있으며이 테이블에는 행이 하나만 있어야합니다. 미래의 개발자가 이것을 이해하도록 돕기 위해 하나 이상의 데이터 행이 추가되는 것을 막고 싶습니다. 아래와 같이 트리거를 사용하기로 선택했습니다 ...
ALTER TRIGGER OnlyOneConfigRow
ON [dbo].[Configuration]
INSTEAD OF INSERT
AS
BEGIN
DECLARE @HasZeroRows BIT;
SELECT @HasZeroRows = CASE
WHEN COUNT (Id) = 0 THEN 1
ELSE 0
END
FROM
[dbo].[Configuration];
IF EXISTS(SELECT [Id] FROM inserted) AND @HasZeroRows = 0
BEGIN
RAISERROR ('You should not add more than one row into the config table. ', 16, 1)
END
END
이것은 오류를 발생시키지 않지만 첫 번째 행이 들어 가지 못하게합니다.
또한 테이블에 삽입 할 수있는 행 수를 이것보다 1로 제한하는보다 효과적이고 더 자기 설명하는 방법이 있습니까? 기본 제공 SQL Server 기능이 누락 되었습니까?
2
원래 접근 방식이 작동하지 않은 이유에 대한 설명과 마찬가지로 : 대신 트리거를 사용합니다. 즉, insert 문 대신 코드가 실행됩니다. 따라서 삽입이 이루어 지려면 트리거의 일부로 삽입해야합니다.
—
Scott M