我有以下查询:
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行,是否有办法阻止输出结果集?一个想法是一个存储过程,它接受select并从中构造第一个示例查询,但是想知道有一种内置的方法来做它。
由于 乔
答案 0 :(得分:0)
这个怎么样?
if exists(SELECT Column1 ,
Column2
FROM dbo.Table1
EXCEPT
SELECT Column1 ,
Column2
FROM @proposedData)
RAISERROR ('Invalid ObjectType values',16,10)