2017-08-06 32 views
0

下面的腳本提供了以下錯誤信息:HASHBYTES功能

「消息8152,級別16,狀態10,10號線 字符串或二進制數據將被截斷。」

select convert(varbinary(max),HASHBYTES('md2',(select [Secteur] 
    ,[Hub] 
    ,[Group] 
    ,[Enterprise] 
    ,[Manager] 
    ,[BM] 
    from [Hubs] for XML auto))) 

我提到輸入行的最大長度是123字節。

任何想法爲何這條信息? (我使用SQL Server 2014)非常感謝

+0

官方文件說來計算的大型二進制數據的MD2,最大的回報值是'VARBINARY(最大8000個字節)' – TheGameiswar

+0

或者更貼切它還說「對於SQL Server 2014及更早版本,允許的輸入值限制爲8000字節。」 –

+0

您的查詢中既沒有ORDER BY也沒有WHERE。這意味着您將整個表格轉換爲XML,並且行排序不是確定性的。這可能不是你想要的作爲散列輸入。如果你只想要一種機制來檢測數據是否發生了變化,並且你沒有通過XML與MD2哈希結婚,那麼考慮使用'CHECKSUM_AGG'。 –

回答

1

SQL 2014和更早版本中,HASHBYTES限制爲8000個字符輸入。它在SQL 2016+中不受限制。我懷疑您的查詢時轉換爲XML是超過8000字節。

您可以使用未記錄的fn_repl_hash_binary在sql 2014中獲取長輸入數據的MD5哈希(但不是MD2),但我不推薦它。它不僅沒有記錄,它在Azure SQL中根本不起作用。

我相信你會需要使用CLR函數在SQL 2014年