2012-06-05 4 views
1

열에 명시적인 값을 지정하지 못하도록하는 방법이 있습니까? ID 특성은 IDENTITY_INSERT가 꺼져있는 한 명시 적 값을 지정하지 못하게합니다. 이는 원하는 동작 유형입니다.열의 값 지정 방지

create table testguid (
    ID uniqueidentifier default newsequentialid() not null primary key 
    ,somedate datetime 
) 

[제약 또는 여기 트리거?]

insert into testguid (somedate) values (getdate()) -- this is ok 
insert into testguid (ID, somedate) values (newid(), getdate()) -- this is not ok 

내가 값을 삽입하기 위해 데이터베이스를 원하지만, 내가 그들을 지정의 방법을 방지 할 수 있습니다.

답변

1

기본적으로 INSTEAD OF TRIGGER를 사용하여 ID 열을 제외한 INSERT 문을 다시 작성할 수 있습니다.

CREATE TRIGGER dbo.testguid_beforeinsert 
INSTEAD OF INSERT 
AS 
BEGIN 
    SET NOCOUNT ON; 

    INSERT dbo.testguid(somedate --, other columns 
    ) SELECT GETDATE() --, other columns 
    FROM inserted; 
END 
GO 

아마도 UPDATE와 비슷한 것을 원할 것입니다.

+0

올바른 생각인데, 나는이 말을해야만했지만 오류를 반환하고 명령을 롤백하여이를 방지하려고합니다. –

+0

내가 할 수 있을지 모르겠다. 'inserted' 의사 - 테이블은 그것이 사용자에 의해 지정되었는지 여부에 관계없이 값을 포함 할 것이고, 그것이 당신의'newsequentialid' 순서에 있는지 아닌지를 결정하는 것이 어려울 것이라고 생각합니다. 사람들이이 컬럼을 지정하지 못하게하려는 이유는 무엇입니까? 이것을 제어하는 ​​올바른 방법은 테이블에 대한 삽입 권한을 제거하고 해당 열에 대한 매개 변수를 허용하지 않는 저장 프로 시저를 통과하도록하는 것입니다. –