2013-05-28 7 views
0

Я хочу найти дубликаты данных в базе данныхНайти дубликаты данных SQL Server 2008 (чувствительно к регистру)

мой запрос, как этот

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

возвращаемые данные, как этот

1

Но когда я выбираю запрос, где данные дублируются, результат:

2

Вопрос Как найти дубликаты данных на сервере sql с учетом регистра.

так что запрос может различать его по-настоящему дублирующимся или нет.

Спасибо вы

К сожалению моим старшим просто играть трюк со мной данными, он просто показать на Linked Server и правда сервера уход чувствительной Пожалуйста, отметьте этот вопрос близко.

+0

Я думаю, вы хотите случай нечувствительность в соответствии с вашими изображениями вместо чувствительности к регистру, правильно? – sarwar026

+0

Я хотел найти дубликаты данных, используя запрос выше. но результат сказал, что у меня есть повторяющиеся данные. но когда я выбираю данные с использованием ID, PK1, PK2, PK3. результат на PK1 отличается тем, что чувствительность к обслуживанию на сервере. – user2085632

+0

sql server по умолчанию нечувствителен к регистру. вот почему вы нашли такую ​​ситуацию – sarwar026

ответ

3

Использовать сопоставления. В приведенном ниже примере я использовал польскую сортировку, но вы можете использовать другую.

CI = Case Нечувствительность, AI = Accent Inensitive, CS = Case Sensitive, AS = Accent Sensitive

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 
Смежные вопросы