Создайте свободно напечатанный udf, похожий на ISNULL - PullRequest
2 голосов
/ 09 июля 2011

Можно ли создать udf, в котором тип возвращаемого значения совпадает с первым аргументом.

Другие примечания:

  • Первый аргумент может быть любого типа, и если он равен нулю, возвращаемое значение равно нулю без базового типа.
  • Ограничения на втором аргументе, поэтому тип соответствует типу первого.

http://msdn.microsoft.com/en-us/library/aa933210(v=SQL.80).aspx

Ответы [ 2 ]

1 голос
/ 09 июля 2011

Вы можете попробовать использовать тип данных sql_variant для UDF. (У меня нет BTW)

Однако простой встроенный ISNULL все равно использует тип данных 1-го аргумента.

Если вы не предоставили нам полную информацию в вопросе о том, чего вы намерены достичь ...

Редактировать: после обновления

Смысл ISNULL в том, чтобы заменить NULL (1-й аргумент) значением (2-й аргумент).

Нет "типа" NULL. Int или varchar могут принимать значение NULL. Но это все еще базовый тип данных

ISNULL в любом случае ограничивает 2-й аргумент 1-м типом: 2-й аргумент должен быть неявно преобразованным. Так что SELECT ISNULL(CAST(NULL AS int), 'foo') потерпит неудачу

Итак, используйте встроенный ISNULL, который делает то, что вы хотите. А udf не нужен

Редактировать, после комментария

У вас не может быть одного udf, чтобы охватить все типы данных.

Не менее важно, что у udf есть один тип возвращаемых данных.

0 голосов
/ 09 июля 2011

SQL Server ISNULL(), как вы указали, принимает 2 параметра, первый - выражение любого типа, а второй - замена, если первый аргумент равен нулю. Возвращает тот же тип, что и проверяемый аргумент.

check_expression: выражение для проверки на NULL. check_expression может быть любого типа .

replace_value: выражение, которое будет возвращено, если check_expression имеет значение NULL. замещающее_значение должно иметь тот же тип, что и check_expression .

Типы возврата: Возвращает того же типа , что и выражение check_express.

Из вашего отредактированного вопроса звучит так, будто ISNULL уже делает то, что вам нужно.

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