문제

테이블의 항목을 제한하고 싶습니다. 테이블에서 말합시다 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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top