SQL 服务器跟踪文件为 NTEXT 类型的字段 TextData 创建唯一标识符
SQL Server Trace file create unique identifier for field TextData of type NTEXT
要分析我导入的跟踪文件,它需要 Select Distinct TextData from myImportedTraceFile
的唯一值
我尝试使用 hashbyte,但我不确定 MD5
是否是创建唯一标识符的正确工具。即使是这样(如果是这样请告诉我)我仍然有问题
- 使用
HASHBYTES('MD5', CAST(TextData AS varchar(7999))) As TextData_HashBytes
剪切几行 (see this reply)
如何为 TextData
列中的每个唯一值 (Select Distinct TextData from ..
) 创建唯一标识符?
更新
基于 Dan 的 post 我创建了这个测试用例
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) 是如何处理的。
所以一些空格被删除了,其他的则没有。
您可以使用派生的 table 和 SELECT DISTINCT
:
SELECT NEWID() AS UniqueID, TextData
FROM (
SELECT DISTINCT CAST(TextData AS nvarchar(MAX)) AS TextData
FROM myImportedTraceFile
) AS UniqueQueries;
要分析我导入的跟踪文件,它需要 Select Distinct TextData from myImportedTraceFile
我尝试使用 hashbyte,但我不确定 MD5
是否是创建唯一标识符的正确工具。即使是这样(如果是这样请告诉我)我仍然有问题
- 使用
HASHBYTES('MD5', CAST(TextData AS varchar(7999))) As TextData_HashBytes
剪切几行 (see this reply)
如何为 TextData
列中的每个唯一值 (Select Distinct TextData from ..
) 创建唯一标识符?
更新
基于 Dan 的 post 我创建了这个测试用例
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) 是如何处理的。 所以一些空格被删除了,其他的则没有。
您可以使用派生的 table 和 SELECT DISTINCT
:
SELECT NEWID() AS UniqueID, TextData
FROM (
SELECT DISTINCT CAST(TextData AS nvarchar(MAX)) AS TextData
FROM myImportedTraceFile
) AS UniqueQueries;