2014-10-08 80 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查詢是重複的代碼。這引起了人爲錯誤的可能性 - 兩個查詢應該是相同的,但可能會有所不同。另一種方法是:

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

這個怎麼樣?

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

感謝您的建議,但我想要的是不一致數據的輸出當且僅當它不一致。 – nonpoliticaltag 2014-10-09 13:49:48

相關問題