2013-05-28 96 views
0

我想找到數據庫中的重複數據查找重複數據的SQL Server 2008(區分大小寫)

我的查詢是喜歡這樣

1

SELECT ID, FK1,FK2,FK3 , COUNT(*) as duplicate 
FROM Pilkada.dbo.Transaction  
Group by ID, FK1,FK2,FK3  
having COUNT(*) >1 

的數據返回

但是,當我選擇數據重複的查詢結果:

2

問題是如何在大小寫敏感的sql server上查找重複數據

所以查詢可以區分它真的重複與否。

謝謝

對不起我的前輩只是玩弄我的手段,他只是表示是 鏈接服務器上,是真正的服務器的數據是護理敏感 請註明這個問題是密切。

+0

我想,您可以根據您的圖片想不區分大小寫而不是區分大小寫,對嗎? – sarwar026

+0

我想用上面的查詢查找重複的數據。但結果表明我有重複的數據。但是當我使用ID,PK1,PK2,PK3選擇數據時。在PK1上的結果是不同的,因爲服務器上的護理敏感。 – user2085632

+0

默認情況下,sql server不區分大小寫。這就是你找到這種情況的原因 – sarwar026

回答

3

使用排序規則。在下面的例子中,我使用了波蘭語整理,但你可以使用另一個。

CI =不區分大小寫,AI =口音Inensitive,CS =區分大小寫,AS =區分重音

SELECT 
    ID, 
    FK1 COLLATE Polish_CI_AI, 
    FK2 COLLATE Polish_CI_AI, 
    FK3 COLLATE Polish_CI_AI, 
    COUNT(*) as duplicate 
FROM Pilkada.dbo.Transaction  
GROUP BY 
    ID, 
    FK1 COLLATE Polish_CI_AI, 
    FK2 COLLATE Polish_CI_AI, 
    FK3 COLLATE Polish_CI_AI 
HAVING COUNT(*) >1 

排序例子

CREATE TABLE #t (
    k1 varchar(10) 
) 

INSERT INTO #t VALUES ('Mars') 
INSERT INTO #t VALUES ('mars') 
INSERT INTO #t VALUES ('maRs') 
INSERT INTO #t VALUES ('MARS') 

SELECT * 
FROM #t 
WHERE k1 = 'mars' 

SELECT k1 COLLATE Polish_CS_AS , COUNT(*) 
FROM #t 
GROUP BY 
    k1 COLLATE Polish_CS_AS 

SELECT k1 COLLATE Polish_CI_AS , COUNT(*) 
FROM #t 
GROUP BY 
    k1 COLLATE Polish_CI_AS 

DROP TABLE #t