2014-10-08 3 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

Смежные вопросы