【发布时间】:2015-05-12 03:10:48
【问题描述】:
我正在为我正在从事的项目自学基本和中级 SQL 概念。
我有很多数据需要进行处理,以便以不同的方式呈现。现在,我在 select 语句中使用标量函数调用来处理数据。
一个简单的例子,假设我的表中有一个名为 fun 的属性作为数据类型 int。我想处理我的表,以便所有 fun 10 的行都是“faa”。
所以我写了一个类似的 SQL 函数
CREATE FUNCTION dbo.fooORfaa
(
@fun AS int
)
RETURNS VARCHAR(3)
AS
BEGIN
IF (@fun < 10)
RETURN 'foo'
RETURN 'faa'
END
然后我在类似这样的 select 语句中使用我的函数
select dbo.fooORfaa([mytable].[fun]) AS 'blah'
from mytable
这个例子很简单,但在我的真实代码中,我需要对一个或多个列执行一些相当复杂的逻辑,我正在从过程中选择子结果并将表连接在一起以及您需要在数据库中做的其他事情。
我必须在合理的时间跨度内处理大量记录。这种方法是解决这个问题的有效方法吗?我应该使用另一种技术吗?
【问题讨论】:
-
如果您的
fooORfaa函数底层的字段相对不变,和/或您正在进行的计算是“繁重”或“昂贵”,那么您最好将它们保存在额外的字段,这样您就不会在每次使用表格时浪费大量的 CPU 重做所有计算。一些适当的触发器可以在(希望)极少数情况下(希望)值确实发生更改,从而使表保持最新。 -
使用 store 存储过程
-
虽然不直观,但表值函数通常比标量值函数更有效。
标签: sql sql-server