Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在标量函数中使用表查找功能可以吗?_Sql Server_Tsql_Function - Fatal编程技术网

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

Sql server 在标量函数中使用表查找功能可以吗?,sql-server,tsql,function,Sql Server,Tsql,Function,在我们的例子中,我们有一些业务逻辑,它以特定的顺序查看多个表,以便使用一个表中的第一个非空值。虽然查找并不困难,但需要几行SQL代码才能完成。我已经读过SQL Server中的标量值函数,但不知道重新兼容问题是否对我的影响足够大,以至于我无法以一种不太方便的方式完成它 那么一般的经验法则是什么呢 你喜欢吃像这样的东西吗 select id, udfGetFirstNonNull(id), from mytable 还是表值函数比标量函数更好 select id, (select firs

在我们的例子中,我们有一些业务逻辑,它以特定的顺序查看多个表,以便使用一个表中的第一个非空值。虽然查找并不困难,但需要几行SQL代码才能完成。我已经读过SQL Server中的标量值函数,但不知道重新兼容问题是否对我的影响足够大,以至于我无法以一种不太方便的方式完成它

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

你喜欢吃像这样的东西吗

select id, udfGetFirstNonNull(id), from mytable
还是表值函数比标量函数更好

select id, 
  (select firstNonNull from udfGetFirstNonNull(id)) as firstNonNull
from myTable

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

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

标量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