Verwenden master.sys.fn_varbintohexsubstring in der berechneten Spalte

In meiner sql-server-Tabelle möchte ich hinzufügen, dass eine berechnete Spalte, die einen hash, der andere Spalten in derselben Tabelle. Unten ist meine Tabellenstruktur.

Adresse:

AddressID(int , PK)

AddressLine1 (nvarchar)

AddressLine2 (nvarchar)

Stadt (nvarchar)

Zustand (nvarchar)

AddressHash(berechnete Spalte)

Unten ist das, was ich will in meinem berechnete Spalte:

MASTER.SYS.FN_VARBINTOHEXSUBSTRING(0, HASHBYTES('SHA1',COALESCE(AddressLine1, N'') + COALESCE(AddressLine2, N'') + COALESCE(City, N'') + COALESCE(State, N'')), 1, 0)

Wenn ich mit der rechten Maustaste auf die Tabelle und gehen Sie zu design und geben Sie die oben für die "Formel" unter "Berechnete Spalte "Spezifikation", bekomme ich die folgende Fehlermeldung:

- Nicht ändern Tabelle.

Eine benutzerdefinierte Funktion name nicht vorangestellt werden, einen Datenbank-name in diesem Zusammenhang.

So, ich dachte, ich würde verwenden eine Benutzer-definierte Funktion um den hash zu berechnen, und anzeigen, dass udf-Formel.

Unten ist der code, den ich benutze zum erstellen von 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

Aber bekomme ich die folgende Fehlermeldung mit dem obigen code:

*Nicht schema bind-Funktion 'udfHashAddress" weil der name 'MEISTER.SYS.FN_VARBINTOHEXSUBSTRING' ist ungültig für die schema-Bindung. Müssen die Namen werden in zwei-Teil-format und ein Objekt kann nicht auf sich selbst.*

Wenn ich entfernt die "MASTER" db-Präfix bekam ich diese Fehlermeldung:

*Nicht schema bind-Funktion 'udfHashAddress", weil es Referenzen system-Objekt " SYS.FN_VARBINTOHEXSUBSTRING'.*

Bin ich hier etwas fehlt? Würde schätzen jede Hilfe/Hinweise.

  • Sie benötigen es, um ein string sein? Konnte Sie nicht verwenden Sie varbinary(20) statt? Haben Sie einen Blick auf diese Antwort. stackoverflow.com/questions/6807438/... Es verwendet md5-und varbinary(16).
InformationsquelleAutor muruge | 2011-08-01
Schreibe einen Kommentar