我有一个multi statement table valued function
,我想将其更改为inline table valued function
以进行优化(我真的不知道这是否会进行优化,但我还是想尝试一下)。我的问题是我有一个scalar variable
,我不知道如何填写我的WITH
声明。
代码示例:
CREATE FUNCTION [dbo].[function]()
RETURNS
@return_table table (id INT,value NVARCHAR(500))
AS
BEGIN
DECLARE @tmp_table TABLE(id INT, value VARCHAR(500))
DECLARE @variable BIGINT
INSERT INTO @tmp_table [...insert code...]
SET @variable = (SELECT MAX(id) FROM @tmp_table)
INSERT INTO @return_table SELECT id,value FROM @tmp_table WHERE id = @variable
RETURN
这段代码是一个例子,实际功能比较复杂但问题完全相同
我可以轻松地将此更改为单个WITH
语句,如下所示:
CREATE FUNCTION [dbo].[function]()
RETURNS TABLE
AS
RETURN
(
WITH tmp_table AS (
SELECT [...Select Code...]
)
SELECT id,value FROM tmp_table
WHERE id = [variable]
);
GO
我的问题在于[variable]
,我不知道如何进入查询。另外,variable
在我的函数中被多次使用,所以我不想只用查询替换它。
我也试过这种方法:
CREATE FUNCTION [dbo].[function]()
RETURNS TABLE
AS
RETURN
(
WITH tmp_table AS (
SELECT [...Select Code...]
), variable = (SELECT MAX(id) value FROM tmp_table)
SELECT id,value FROM tmp_table
WHERE id = (SELECT TOP 1 value FROM variable)
);
GO
但似乎它使功能变慢了。
谢谢。
答案 0 :(得分:1)
试试
WITH tmp_table AS (
SELECT [...Select Code...]
)
SELECT id,value FROM tmp_table WHERE id = (SELECT MAX(id) FROM tmp_table)
我实际上只是将其改为
SELECT TOP 1 *
FROm [whatever]
ORDER BY id DESC