如何用sql中的视图替换函数?

时间:2014-07-18 06:28:24

标签: sql sql-server-2008

我一直处于一种奇怪的情况,我使用的功能是从特定的表中检索前1个记录。但是使用函数会查询我的查询的性能,因为该表有超过50,000条记录。我想知道如何用视图替换该函数,然后将其加入存储过程,以便我可以获得更好的性能。这是我在函数中编写的代码

Create function getlatestusernote(@warrantid varchar(20))      
Returns varchar(300)    
As       
Begin       
Declare @latestnote  VARCHAR(300)    
SELECT TOP 1 @latestnote= Remarks FROM Warrant_notes WHERE WarrantID = @warrantid AND NotesCat <>0 ORDER BY NoteDate  desc    
return @latestnote      
END

我不希望查看同一个查询,请帮我弄清楚这个问题。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

我从最this最高评分(尽管不被接受)的答案(你应该研究一下,以便更好地了解正在发生的事情)来解决另一个问题并对其进行调整。当然,我无法测试这个,但我相信这看起来是正确的。如果它不起作用,请告诉我,我可以帮助排除故障。

您应该能够基于此创建视图,然后根据该视图进行查询。

SELECT WarrantID, Remarks
FROM
(
    SELECT 
        RowNumber = ROW_NUMBER() OVER (PARTITION BY t.WarrantID ORDER BY t.NoteDate DESC),
        t.Remarks,
        t.WarrantID
    FROM
        Warrant_notes t
    WHERE NotesCat <> 0
) i
WHERE i.RowNumber = 1;