私のSQL Serverテーブルでは、同じテーブルの他の列のハッシュである計算列を追加します。以下は私のテーブル構造です。計算された列にmaster.sys.fn_varbintohexsubstringを使用します。
住所:
あるAddressId(int型、PK)
住所1(nvarchar型)
住所2(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 'はスキーマバインドには無効です。名前は二部形式でなければなりませんし、オブジェクト自体を参照することはできません*
私はこのエラーを得た「MASTER」デシベルプレフィックスを削除する場合:。
* ことができないスキーマバインド関数「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 )。 –