1

我创建了一个标量值 CLR UDF(用户定义函数)。它需要一个时区 id 和一个日期时间,并返回转换为该时区的日期时间。

我可以毫无问题地从简单的选择中调用它:“select dbo.udfConvert('Romance Standard Time', @datetime)”(@datetime 当然是一个有效的日期时间变量)

但是,如果我称它为从表中传入日期时间,它会失败:“从某个表中选择 dbo.udfConvert('Romance Standard Time', StartTime)”(StartTime 列当然是日期时间类型的列)

错误消息是:“找不到列“dbo”或用户定义的函数或聚合“dbo.udfConvert”,或者名称不明确。”

此消息实际上是针对拼写错误的初学者,但由于它在一种情况下有效,而在另一种情况下无效,我不认为我有任何拼写错误。

有任何想法吗?

4

2 回答 2

0

我发现了问题。如果我将硬编码的时区提取到一个变量中,它可以正常工作:

声明@timeZoneID nvarchar(100)

选择@timeZoneID='浪漫标准时间'

从某个表中选择 dbo.Convert(@timeZoneID,StartTime)

显然 sql-server 无法弄清楚如何将硬编码字符串转换为 nvarchar 字符串。

于 2009-07-21T14:45:54.497 回答
0

你也可以这样做:

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

如果您不使用 N 作为 Unicode 字符串常量的前缀,SQL Server 将在使用该字符串之前将其转换为当前数据库的非 Unicode 代码页。这就是为什么我找不到带有 nvarchar 签名的函数的原因。

于 2009-08-06T04:18:08.033 回答