创建类似于ISNULL的松散类型的udf

时间:2011-07-09 14:03:49

标签: sql sql-server-2008

是否可以创建一个返回类型与第一个参数相同的udf。

其他说明:

  • 第一个参数可以是任何类型,如果为null,则返回值为null,没有基础类型。
  • 对第二个参数的约束,使类型与第一个参数匹配。

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

2 个答案:

答案 0 :(得分:1)

您可以尝试将sql_variant数据类型用于UDF。 (我没有BTW)

但是,简单的内联ISNULL仍然使用第一个参数的数据类型。

除非你没有在关于你打算实现什么的问题上给我们完整的信息......

编辑:更新后

ISNULL的重点是用值(第二个参数)替换NULL(第一个参数)。

没有NULL的“类型”。 int或varchar可以采用NULL值。但它仍然是基本数据类型

ISNULL无论如何都将第二个参数约束到第一个类型:第二个参数必须是可隐式转换的。因此SELECT ISNULL(CAST(NULL AS int), 'foo')将失败

所以,使用符合你想要的内联ISNULL。不需要udf

评论后编辑

你不能有一个udf来覆盖所有数据类型。

尤其是,udf只有一个返回数据类型。

答案 1 :(得分:0)

SQL Server的ISNULL(),正如您所指出的,需要2个参数,第一个是任何类型的表达式,第二个是第一个arg为null时的替换。它返回与被检查的arg相同的类型。

  

check_expression:要检查表达式是否为NULL。 check_expression可以是任何类型

     

replacement_value:如果check_expression为NULL,则返回表达式。 replacement_value 必须与check_expression 具有相同的类型。

     

返回类型:返回相同类型和check_expression。

从您编辑的问题中听起来好像ISNULL已经完成了您所追求的目标。