2009-07-21 5 views
0

aufgerufen werden. Ich habe eine skalare CLR UDF (benutzerdefinierte Funktion) erstellt. Es benötigt eine Zeitzonen-ID und eine Datetime und gibt die in diese Zeitzone konvertierte Datetime zurück.CLAR UDF kann nicht von select ... aus Tabellenanweisung

Ich kann es aus einem einfachen Auswahl aufrufen, ohne Probleme: "wählen dbo.udfConvert ('Romantik Standard Time', @datetime)" (@datetime natürlich eine gültige Datetime-Variable)

Aber wenn ich nenne es in einem Datetime aus einer Tabelle vorbei es fehlschlägt: „wählen dbo.udfConvert (‚Romantik Standard Time‘, Starttime) von sometable“ (Spalte Startzeit ist natürlich eine Spalte vom Typ Datetime)

der Fehler Nachricht ist: "Kann keine Spalte" dbo "oder die benutzerdefinierte Funktion oder Aggregat" dbo.udfConvert "finden, oder der Name ist mehrdeutig. "

Diese Nachricht ist wirklich für Anfänger, die etwas falsch geschrieben hat, aber da es in einem Fall und nicht in dem anderen Fall funktioniert, glaube ich nicht, dass ich irgendwelche Rechtschreibfehler gemacht habe.

Irgendwelche Ideen?

Antwort

0

Ich habe das Problem gefunden. Wenn ich die hartkodierte Zeitzone aus einer Variablen extrahiert anstatt es funktionierte gut:

declare @timeZoneID nvarchar (100)

wählen @ TimeZoneID = 'Romantik Standard Time'

Select dbo.Convert (@timeZoneID , StartTime) Von etwas

Offenbar konnte SQL Server nicht herausfinden, wie die hardcoded Zeichenfolge in eine Nvarchar-Zeichenfolge konvertiert.

0

können Sie auch tun:

select dbo.udfConvert(N'Romance Standard Time', StartTime) from sometable 

Wenn Sie nicht über ein Unicode-String-Konstante mit N Präfix, SQL Server konvertiert es in der Nicht-Unicode-Codepage der aktuellen Datenbank, bevor es die Zeichenfolge verwendet. Deshalb konnte ich die Funktion nicht mit der Nvarchar-Signatur finden.

Verwandte Themen