Не удается вызвать скалярную определяемую пользователем функцию CLR из оператора select from table

Я создал скалярную CLR UDF (определяемую пользователем функцию). Он принимает идентификатор часового пояса и дату и время и возвращает дату и время, преобразованные в этот часовой пояс.

Я могу без проблем вызвать его из простого выбора: «выберите dbo.udfConvert('Romance Standard Time', @datetime)" (@datetime, конечно, является допустимой переменной даты и времени)

Но если я вызову передачу даты и времени из таблицы, произойдет сбой: «выберите dbo.udfConvert («Стандартное время романтики», StartTime) из какой-то таблицы» (столбец StartTime, конечно, является столбцом типа datetime)

Сообщение об ошибке: «Не удается найти ни столбец «dbo», ни определяемую пользователем функцию, ни совокупность «dbo.udfConvert», либо имя неоднозначно».

Это сообщение действительно для новичков, которые что-то написали с ошибкой, но, поскольку это работает в одном случае, а не в другом, я не думаю, что сделал какие-либо орфографические ошибки.

Есть идеи?


person Community    schedule 21.07.2009    source источник


Ответы (2)


Я нашел проблему. Если бы я извлек жестко закодированный часовой пояс в переменную, он работал нормально:

объявить @timeZoneID nvarchar (100)

select @timeZoneID='Романское стандартное время'

Выберите dbo.Convert(@timeZoneID,StartTime) из какой-либо

По-видимому, sql-сервер не смог понять, как преобразовать жестко закодированную строку в строку nvarchar.

person Community    schedule 21.07.2009

вы также можете сделать:

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

Если вы не добавляете префикс N к строковой константе Unicode, SQL Server преобразует ее в кодовую страницу, отличную от Unicode, текущей базы данных, прежде чем использовать строку. Вот почему я не смог найти функцию с сигнатурой nvarchar.

person Nestor    schedule 06.08.2009