Файл трассировки SQL Server создает уникальный идентификатор для поля TextData типа NTEXT
Для анализа моего импортированного файла трассировки необходимо иметь уникальное значение для Select Distinct TextData from myImportedTraceFile
Я пытался использовать хэшбайт, хотя я не уверен, если MD5
это правильный инструмент для создания уникального идентификатора. Даже если бы это было так (пожалуйста, скажите мне, если это так), то у меня все еще есть проблема, которая
- С помощью
HASHBYTES('MD5', CAST(TextData AS varchar(7999))) As TextData_HashBytes
разрезает несколько рядов ( см. этот ответ)
Что я могу сделать, чтобы создать уникальный идентификатор для каждого уникального значения (Select Distinct TextData from ..
) в столбце TextData
?
Обновить
Основываясь на сообщении от Дэна, я создал этот тест
Drop Table #Temp
Create Table #Temp
(
A int,
B NText
)
Insert Into #Temp ( A, B)
Select 1, 'some space' UNION ALL
Select 2, ' some space' UNION ALL
Select 3, ' some space ' UNION ALL
Select 4, 'some space ' UNION ALL
Select 5, ' some space ' UNION ALL
Select 6, ' some space '
-- this returns 6 rows
Select
HASHBYTES('MD5', CAST(B AS nvarchar(MAX)))
, CAST(B AS nvarchar(MAX)) as B from #Temp;
-- this returns 3 rows
SELECT NEWID() AS UniqueID, B FROM
( Select DISTINCT CAST(B AS nvarchar(MAX)) AS B
FROM #Temp
) sq
Эти три строки являются результатом
' some space ' -- 2sp B + 1sp E --> row 5
' some space' -- 1sp B + 0sp E --> row 2
'some space ' -- 0sp B + 3sp E --> row 4
Неясно, как обрабатываются строки 1 (0sp), 3 (1sp B+E) и 6 (2sp B+E). Таким образом, некоторые пробелы удаляются, а другие нет.
1 ответ
Вы можете использовать производную таблицу с SELECT DISTINCT
:
SELECT NEWID() AS UniqueID, TextData
FROM (
SELECT DISTINCT CAST(TextData AS nvarchar(MAX)) AS TextData
FROM myImportedTraceFile
) AS UniqueQueries;