我正在为自己正在研究的项目自学基础和中级SQL概念。
我有很多需要进行处理的数据,所以可以用不同的方式呈现。现在我在select语句中使用标量函数调用来处理数据。
一个简单的例子,假设我的表中有一个名为fun的属性作为数据类型int。我想处理我的表,以便所有行充满乐趣< 10是' foo'和所有有趣的行> 10是'faa'。
所以我写了一个类似
的SQL函数CREATE FUNCTION dbo.fooORfaa
(
@fun AS int
)
RETURNS VARCHAR(3)
AS
BEGIN
IF (@fun < 10)
RETURN 'foo'
RETURN 'faa'
END
然后我在这个选择语句中使用我的函数
select dbo.fooORfaa([mytable].[fun]) AS 'blah'
from mytable
这个例子很简单,但在我的实际代码中,我需要针对一个或多个列执行一些相当复杂的逻辑,并且我从过程中选择子结果并将表连接在一起以及在数据库中需要做的其他事情。
我必须在合理的时间跨度内处理大量记录。这种方法是解决这个问题的有效方法吗?我应该使用另一种技术吗?
答案 0 :(得分:2)
对于此用例,您需要一个CASE构造。
SELECT
CASE
WHEN T.fun < 10 THEN 'foo'
ELSE 'faa'
END foo_faa
FROM
myTable T
始终尝试使用基于集合的操作。用户定义的函数(大部分)会扼杀你的表现,应该是最后的手段。