У меня есть следующий запрос:выбрать только строки, если по крайней мере один существует
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 строк? Идея - это хранимый процесс, который принимает выбор и конструирует первый пример запроса из него, но задавался вопросом, существует ли встроенный способ сделать это.
Благодаря Джо
Благодарим за предложение, но то, что я хочу, является результатом несогласованных данных тогда и только тогда, когда оно противоречиво. – nonpoliticaltag