2014-10-08 2 views
0

존재하는 경우, 나는 다음과 같은 쿼리를 가지고 :만 행을 선택 적어도 하나는

IF EXISTS (SELECT Column1 , 
       Column2 
     FROM dbo.Table1 
     EXCEPT 
     SELECT Column1 , 
       Column2 
     FROM @proposedData) 
BEGIN 
    SELECT Column1 , 
      Column2 
    FROM dbo.Table1 
    EXCEPT 
    SELECT Column1 , 
      Column2 
    FROM @proposedData 
    RAISERROR('Unexpected values in proposed data',16,10) 
END 

이미 테이블에 존재하는 데이터가 테이블 변수에 나타나지 않는 경우 오류가 발생하고 싶다. 이는 내 소스 코드가 특정 환경에있는 것과 일치하는지 확인하는 것입니다. 이 문제점은 두 개의 선택 쿼리가 중복 코드라는 것입니다. 이것은 인간의 실수 가능성을 가져옵니다. 두 개의 질의는 동일해야하지만 다를 수 있습니다. 대안은 다음과 같습니다

SELECT Column1 , 
      Column2 
    FROM dbo.Table1 
    EXCEPT 
    SELECT Column1 , 
      Column2 
    FROM @proposedData 
IF @@ROWCOUNT <> 0 
BEGIN 
    RAISERROR ('Invalid ObjectType values',16,10) 
END 

그러나이 '이 오염'쿼리 출력으로 데이터가 정확한지 설정 빈 결과가있을 것입니다. 그래서, 거기에 0 행이있는 경우 출력되는 결과 집합을 방지하는 방법은 무엇입니까? 아이디어는 선택을 가져 와서 첫 번째 예제 쿼리를 구성하는 내장 프로 시저입니다.하지만이를 수행 할 수있는 방법이 궁금합니다.

감사 이 약

답변

0

어떻게 조?

if exists(SELECT Column1 , 
      Column2 
    FROM dbo.Table1 
    EXCEPT 
    SELECT Column1 , 
      Column2 
    FROM @proposedData) 
    RAISERROR ('Invalid ObjectType values',16,10) 
+0

제안 해 주셔서 감사합니다.하지만 일치하지 않는 경우에만 일치하지 않는 데이터가 출력됩니다. – nonpoliticaltag

관련 문제