1

スカラー値のCLRUDF(ユーザー定義関数)を作成しました。タイムゾーンIDと日時を受け取り、そのタイムゾーンに変換された日時を返します。

単純な選択から問題なく呼び出すことができます: "select dbo.udfConvert('Romance Standard Time'、@datetime)"(@datetimeはもちろん有効な日時変数です)

しかし、テーブルから日時を渡すと呼び出すと失敗します:「sometableからdbo.udfConvert('Romance Standard Time'、StartTime)を選択してください」(列StartTimeはもちろんdatetime型の列です)

エラーメッセージは次のとおりです。「列「dbo」またはユーザー定義関数のいずれかが見つからないか、「dbo.udfConvert」を集約するか、名前があいまいです。」

このメッセージは、スペルを間違えた初心者向けですが、一方のケースでは機能し、もう一方のケースでは機能しないため、スペルミスはないと思います。

何か案は?

4

2 に答える 2

0

次のこともできます。

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

Unicode文字列定数の前にNを付けない場合、SQL Serverは、文字列を使用する前に、それを現在のデータベースの非Unicodeコードページに変換します。そのため、nvarcharシグネチャを持つ関数が見つかりませんでした。

于 2009-08-06T04:18:08.033 に答える
0

問題を見つけました。ハードコードされたタイムゾーンを変数に抽出した場合、代わりに正常に機能しました。

@timeZoneIDを宣言するnvarchar(100)

@ timeZoneID ='RomanceStandardTime'を選択します

いくつかのテーブルからdbo.Convert(@ timeZoneID、StartTime)を選択します

どうやらsql-serverはハードコードされた文字列をnvarchar文字列に変換する方法を理解できませんでした。

于 2009-07-21T14:45:54.497 に答える