Sql server 在标量函数中使用表查找功能可以吗?
在我们的例子中,我们有一些业务逻辑,它以特定的顺序查看多个表,以便使用一个表中的第一个非空值。虽然查找并不困难,但需要几行SQL代码才能完成。我已经读过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
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