仅当至少存在一行时才选择行

时间:2014-10-08 11:51:19

标签: sql sql-server tsql

我有以下查询:

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并从中构造第一个示例查询,但是想知道有一种内置的方法来做它。

由于 乔

1 个答案:

答案 0 :(得分:0)

这个怎么样?

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