在我的sql服務器表中,我想添加一個計算列,它是同一個表中其他列的哈希值。以下是我的表格結構。在計算列中使用master.sys.fn_varbintohexsubstring
地址:
AddressID(INT,PK)
AddressLine1(NVARCHAR)
AddressLine2(NVARCHAR)
市(NVARCHAR)
國家(NVARCHAR)
AddressHash(計算列)
下面是我想要在我的計算列:
如果我用鼠標右鍵單擊表,去設計和輸入上面的「公式」,「計算列規範」下,我得到以下錯誤:
- 無法修改表。
在此上下文中,用戶定義的函數名稱不能以數據庫名稱作爲前綴。
所以我想我會用一個用戶定義函數計算哈希和其映射UDF式。
下面是我使用創造UDF代碼:
CREATE FUNCTION udfHashAddress
(
@pAddressLine1 nvarchar(50), @pAddressLine2 nvarchar(50), @pCity nvarchar(50), @pState nvarchar(50))
)
RETURNS nvarchar(max) -- not sure what the correct size would be
WITH SCHEMABINDING
AS
BEGIN
DECLARE @result nvarchar(max)
SELECT @result = MASTER.SYS.FN_VARBINTOHEXSUBSTRING(0, HASHBYTES('SHA1',COALESCE(@pAddressLine1, N'') + COALESCE(@pAddressLine2, N'') + COALESCE(@pCity, N'') + COALESCE(@pState, N'')), 1, 0)
RETURN @result
END
GO
,但我得到了下面的錯誤與上面的代碼:
* 無法架構綁定函數「udfHashAddress」,因爲名稱' MASTER.SYS.FN_VARBINTOHEXSUBSTRING'對模式綁定無效。名稱必須是兩部分的格式和對象不能引用自身*
當我刪除了「主」數據庫前綴我得到這個錯誤:
* 無法架構綁定函數「udfHashAddress」,因爲它引用系統對象'SYS.FN_VARBINTOHEXSUBSTRING'。*
我在這裏丟失了什麼嗎?將不勝感激任何援助/指針。
你需要它是一個字符串?你可以不使用varbinary(20)嗎?看看這個答案。 http://stackoverflow.com/questions/6807438/how-to-determine-whether-a-record-with-specific-image-data-type-already-exists-in/6809525#6809525它使用md5和varbinary(16 )。 –