Невозможно вызвать скалярное значение CLR UDF из оператора select ... from table - PullRequest
0 голосов
/ 21 июля 2009

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

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

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

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

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

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 06 августа 2009

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

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

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

0 голосов
/ 21 июля 2009

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

объявляет @timeZoneID nvarchar (100)

select @ timeZoneID = 'Стандартное время романа'

Выберите dbo.Convert (@ timeZoneID, StartTime) Из некоторых

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...