Файл трассировки 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;
Другие вопросы по тегам