【问题标题】:SQL Server Trace file create unique identifier for field TextData of type NTEXTSQL Server 跟踪文件为 NTEXT 类型的字段 TextData 创建唯一标识符
【发布时间】:2017-03-24 11:38:30
【问题描述】:

要分析我导入的跟踪文件,它希望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 的帖子,我创建了这个测试用例

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)。 所以一些空白被删除了。

【问题讨论】:

    标签: sql-server sql-server-2008-r2 ntext


    【解决方案1】:

    您可以使用带有SELECT DISTINCT 的派生表:

    SELECT NEWID() AS UniqueID, TextData
    FROM (
        SELECT DISTINCT CAST(TextData AS nvarchar(MAX)) AS TextData
        FROM myImportedTraceFile
        ) AS UniqueQueries;
    

    【讨论】:

    • 感谢您的帮助。这可能会奏效。你能看看我的编辑。空格如何处理?换行符或其他特殊字符呢?
    猜你喜欢
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 2020-07-15
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    相关资源
    最近更新 更多