SQL 제약 조건 찾기 : tboss <2에서 count (*)를 선택하십시오.
-
06-07-2019 - |
문제
테이블의 항목을 제한하고 싶습니다. 테이블에서 말합시다 tboss. 현재 테이블에 얼마나 많은 튜플이 있는지 확인하는 SQL 제약 조건이 있습니까? 처럼
SELECT COUNT(*) from tBoss < 2
파이어 버드 말한다 :
잘못된 토큰. 동적 SQL 오류. SQL 오류 코드 = -104. TOKEN UNKNOWN -3 행, 열 8을 선택하십시오.
감사. 노버트
해결책
데이터베이스에 트리거가 있습니까? 그렇다면 2 행 이상을 추가하는 삽입물을 롤백하는 트리거를 추가하십시오 ...
Create Trigger MyTrigName
For Insert On tBoss
As
If (Select Count(*) From tBoss) > 2
RollBack Transaction
그러나 귀하의 질문에 직접 답변하려면 원하는 술어는 선택 하위 쿼리를 괄호 안에 넣는 것입니다. 이와 같이 ...
[First part of sql statement ]
Where (SELECT COUNT(*) from tBoss) < 2
다른 팁
점검 제약과 스칼라 함수 로이 작업을 수행 할 수 있습니다. 샘플을 구축 한 방법은 다음과 같습니다.
먼저 테이블을 만듭니다.
CREATE TABLE MyTable
(
MyTableId int not null identity(1,1)
,MyName varchar(100) not null
)
그런 다음 해당 테이블의 함수를 만듭니다. (유연성을 원할 경우 행 카운트 한계를 매개 변수로 추가 할 수 있습니다.)
CREATE FUNCTION dbo.MyTableRowCount()
RETURNS int
AS
BEGIN
DECLARE @HowMany int
SELECT @HowMany = count(*)
from MyTable
RETURN @HowMany
END
이제이 기능을 사용하여 검사 제약 조건을 테이블에 추가하십시오.
ALTER TABLE MyTable
add constraint CK_MyTable__TwoRowsMax
check (dbo.MyTableRowCount() < 3)
테스트 :
INSERT MyTable (MyName) values ('Row one')
INSERT MyTable (MyName) values ('Row two')
INSERT MyTable (MyName) values ('Row three')
INSERT MyTable (MyName) values ('Row four')
단점은 테이블에 삽입 할 때마다 기능을 실행하고 테이블 스캔을 수행해야한다는 것입니다. 그러나 테이블 (클러스터 인덱스 포함)은 최대 두 페이지를 차지합니다. 진짜 단점은 그것이 바보처럼 보인다는 것입니다 ...하지만 이해하지 못할 때 모든 것이 구피처럼 보입니다. 왜 그렇게해야합니다.
(트리거 솔루션은 작동하지만 가능할 때마다 트리거를 피하고 싶습니다.)
데이터베이스에서 배수를 찾으려면 가장 좋은 방법은 하위 쿼리입니다.
id in tboss에서 ID를 선택하십시오 (id hown count (*)> 1)
여기서 ID는 복제 된 열일 가능성이 있습니다
SELECT COUNT(*) FROM tBoss WHERE someField < 2 GROUP BY someUniqueField