2009-07-21 8 views
0

J'ai créé une fonction UDF CLR à valeur scalaire (fonction définie par l'utilisateur). Il prend un ID timezone et un datetime et renvoie le datetime converti en ce fuseau horaire.Impossible d'appeler CLF UDF à valeurs scalaires à partir de select ... à partir de l'instruction de table

Je peux l'appeler d'un simple sélection sans problème: "select dbo.udfConvert ('Romance heure normale', @datetime)" (@datetime est bien sûr une variable datetime valide)

Mais si Je l'appelle le passage dans un datetime d'une table, il échoue: « select dbo.udfConvert (« Romance heure normale », StartTime) de sometable » (colonne StartTime est bien sûr une colonne de type datetime)

L'erreur le message est: "Impossible de trouver la colonne" dbo "ou la fonction définie par l'utilisateur ou l'agrégat" dbo.udfConvert ", ou le nom est ambigu. "

Ce message est vraiment pour les débutants qui ont mal orthographié quelque chose, mais comme cela fonctionne dans un cas et pas dans l'autre, je ne pense pas avoir fait d'erreurs d'orthographe.

Des idées?

Répondre

0

J'ai trouvé le problème. Si je tirai le fuseau horaire hardcoded vers une variable au lieu il a bien fonctionné:

@timeZoneID nvarchar déclare (100)

select @ TimeZoneID = 'Romance Heure normale'

Sélectionnez dbo.Convert (@timeZoneID , StartTime) De quelquechose

Apparemment, sql-server ne pouvait pas comprendre comment convertir la chaîne codée en dur en une chaîne nvarchar.

0

vous pouvez également faire:

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

Si vous ne préfixe pas une chaîne Unicode constante avec N, SQL Server convertir à la page de code non-Unicode de la base de données actuelle avant qu'il utilise la chaîne. C'est pourquoi je n'ai pas trouvé la fonction avec la signature nvarchar.

Questions connexes