2013-05-28 53 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