代码之家  ›  专栏  ›  技术社区  ›  Haoest

在标量函数中使用表查找功能可以吗?

  •  1
  • Haoest  · 技术社区  · 14 年前

    在我们的例子中,我们有一些业务逻辑,按照一定的顺序查看多个表,这样就使用了一个表中的第一个非空值。虽然查找并不困难,但确实需要几行SQL代码才能完成。我读过有关SQL Server中标量值函数的文章,但不知道重新编译问题是否影响到我以不太方便的方式执行它。

    那么一般的经验法则是什么?

    你想要点像这样的东西吗

    select id, udfGetFirstNonNull(id), from mytable
    

    或者表值函数比标量函数好吗?

    select id, 
      (select firstNonNull from udfGetFirstNonNull(id)) as firstNonNull
    from myTable
    
    3 回复  |  直到 14 年前
        1
  •  1
  •   gbn    14 年前

    标量udf将查找myTable中的每一行,这些行可以随着数据的增加而呈指数增长。实际上你有一个光标。如果你有几排,那当然没关系。

    不过,我会考虑在这里放置“foo”的表值函数foo“也可以是UDF中的CTE(未测试):

    select id, 
      (select firstNonNull from udfGetFirstNonNull(id)) as firstNonNull
     from
        myTable M
        JOIN
        (SELECT value, id as firstNonNull
         FROM OtherTable
         WHERE value IS NOT NULL
         GROUP BY id
         ORDER BY value) foo ON M.id = foo.id
    
        2
  •  1
  •   Fosco    14 年前

    你的第一个问题很好。我工作的一个地方绝对是痴迷于速度和优化,他们大量使用UDF。

        3
  •  1
  •   Adriaan Stander    14 年前

    我认为为了可读性和可维护性,我更喜欢使用标量函数,因为这就是它返回的内容。