2016-08-04 28 views
0

我想驗證客戶表中唯一的記錄,並編寫以下查詢驗證獨特的記錄在SQL Server 2012中

declare @NT1 int 

set @NT1 = (SELECT LogID, CustomerID, count(1) 
FROM dbo.Customer 
group by LogID,CustomerID 
having count(1) >1) 

if @NT1 > 1 

print 'Fail' 

ELSE 
    PRINT 'Pass'; 

我得到以下信息查詢:

只有一個表達式可以在未使用EXISTS引入子查詢時在選擇列表中指定。

+1

請描述你的意思是什麼「驗證客戶表中唯一的記錄」。你的代碼沒有這樣做,但你不明白你的意思。 –

+0

嗨戈登,我會檢查所有的LogID和CustomerID是唯一的,不重複 – Anson

回答

2

如果您想驗證在Customer表中沒有多次出現(LogId, CustomerId)對,那麼您可以這樣做。

最簡單的方法是:

create unique index idxu_customer_logid_customerid on customer(logid, customerid); 

這樣一來,數據庫保證唯一性。而且,其餘的代碼不必擔心。

如果你想運行測試,使用exists

IF (EXISTS (SELECT LogID, CustomerID, count(1) 
      FROM dbo.Customer 
      GROUP BY LogID, CustomerID 
      HAVING count(1) > 1 
      ) 
    ) 
BEGIN 
    PRINT 'Fail'; 
END 
ELSE 
BEGIN 
    PRINT 'Pass'; 
END; 
+0

嗨戈登,這個查詢的輸出是消息,我無法導出消息。是否有可能,我們得到的結果是數據結果? - 謝謝 – Anson

+0

@Anson。 。 。我不知道你的意思是「出口信息」。你的問題使用'print',所以我必須假設你想打印出結果。如果您還有其他問題 - 請說明如何在另一個查詢中使用這些信息 - 然後提出另一個問題,附帶樣本數據以及您如何使用結果的說明。 –

+0

嗨,戈登,我想驗證我們的記錄是否符合失敗條件(HAVING count(1)> 1),並檢查有多少記錄失敗。謝謝 – Anson

0
DECLARE @Ncount int 

set @Ncount = (select top 1 
count(1) 
      FROM dbo.Customer 
      GROUP BY LogID, CustomerID 
         HAVING count(1) > 0 
      ) 

SELECT IIF (@Ncount >= 1, 'Failed', 'Pass') AS Result; 
+0

有count(1)> 1? – Beth