sqlserver에서 check절에 쿼리를 사용하게 되면은 


이 컨텍스트에는 하위 쿼리를 사용할 수 없습니다. 스칼라 식만 사용할 수 있습니다.


이런 에러가 발생합니다.


그래서 트리거나 프로시저로 검사를 해줘야 하는데요. 트리거는 잘 사용을 못하고... 프로시저에서 검사를 해줘야 하면은 관련된 프로시저에 반복적으로 코딩을 해줘야 하는 번거로움이 있습니다. 


그래서, 이런 경우에 사용할 수 있는 방법입니다. 


check절에 사용하려는 쿼리를 스칼라값을 반환하는 함수로 만들어서 check절에 사용하면 원래의 목적을 얻을 수 있습니다. 


간단히 셈플 코드를 보면은,


캐시 인지 표시하는 테이블 a가 있습니다.

create table a (col int, iscash tinyint);


그리고, 그 테이블에서 해당 col값이 캐시인지 검색하는 함수가 있습니다. 

create function dbo.func (@col int)

returns int

as

begin

    declare @ret int;

    set @ret = (select iscash from dbo.a where col = @col);

    return @ret;

end

go


이제 이 함수를 사용해서 check제약 조건을 사용하는 테이블을 만들어 보도록 하겠습니다.






create table b (col int check (dbo.func(col) = 1));

간단합니다. 


테스트를 위해서 우선 a테이블에 검색용 데이터를 입력 합니다.

insert into dbo.a(col, iscash) values (1, 0), (2, 1);


그리고 b테이블에 데이터를 입력하면서 check제약 조건이 잘 동작하는지 확인해 보겠습니다.


우선 제약 조건을 위반하는 데이터를 넣으면

insert into dbo.b(col) values (1);


INSERT 문이 CHECK 제약 조건 "CK__b__col__297722B6"과(와) 충돌했습니다. 데이터베이스 "test", 테이블 "dbo.b", column 'col'에서 충돌이 발생했습니다.


이런 비슷한 에러가 발생합니다. 


이번에는 제약 조건을 만족하는 데이터를 넣으면

insert into dbo.b(col) values (2);


정상적으로 입력이 됩니다.



저처럼 트리거를 잘 사용 못하는 분들은 한번 사용해 보세요. 트리거 잘 사용하시는 분들은 몰라요 -  _-)a;;


No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 833
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 1592
1574 SSAS 부모-자식 차원 - 부모자식 차원 생성 jevida(강성욱) 2013.10.14 6017
1573 SSAS 차원 - (3) 롤-플레잉 차원 jevida(강성욱) 2013.10.14 6100
1572 SSAS 차원 - (2) 시간 차원 jevida(강성욱) 2013.10.14 6042
1571 SSAS 차원 - (1) 표준 차원 jevida(강성욱) 2013.10.14 5759
1570 SSAS - 큐브 조회 jevida(강성욱) 2013.10.07 7996
1569 SSAS - 큐브 만들기 jevida(강성욱) 2013.10.07 9195
1568 SSAS - SSAS 환경 설정 jevida(강성욱) 2013.10.07 9251
1567 SSIS - BIDS 임시 파일 위치 설정 jevida(강성욱) 2013.10.02 8798
1566 SSIS - SSIS패키지 실행 하기. – Job Agent 등록 및 수동 실행 jevida(강성욱) 2013.10.02 15633
1565 SSIS - 패키지 저장 방식의 종류 및 장점. jevida(강성욱) 2013.10.02 8346
1564 SSIS - 성능 카운터 - SSIS를 튜닝 하자 jevida(강성욱) 2013.10.02 9244
1563 SSIS - 배포 및 배포 마법사 jevida(강성욱) 2013.10.02 11055
1562 SSIS - 로깅 - SSIS의 실행 정보를 로깅하자 jevida(강성욱) 2013.10.02 7641
1561 SSIS - 보안 - 보안레벨에 따른 암호화 수준. jevida(강성욱) 2013.10.02 9181
1560 SSIS - 트랜잭션 - 패키지에서 트랜잭션을 제어 하자 jevida(강성욱) 2013.10.02 7572
1559 SSIS -스크립트 작업 및 ActiveX 스크립트 작업 jevida(강성욱) 2013.10.02 9006
1558 SSIS - SQL 실행 작업 jevida(강성욱) 2013.10.02 12027
1557 SSIS - WMI 이벤트 감시자 작업 jevida(강성욱) 2013.09.25 8397
1556 SSIS - WMI 데이터 판독기 작업 jevida(강성욱) 2013.09.25 7651
1555 SSIS - FTP 작업 jevida(강성욱) 2013.09.25 9603





XE Login