如何在sql中用视图替换函数?
我遇到了一个奇怪的情况,我正在使用一个函数从一个特定的表中检索前1条记录。但是使用函数会降低查询的性能,因为表有50000条以上的记录。我想知道如何用视图替换该函数,然后将其加入到存储过程中,以便获得更好的性能。下面是我在函数中编写的代码如何在sql中用视图替换函数?,sql,sql-server-2008,Sql,Sql Server 2008,我遇到了一个奇怪的情况,我正在使用一个函数从一个特定的表中检索前1条记录。但是使用函数会降低查询的性能,因为表有50000条以上的记录。我想知道如何用视图替换该函数,然后将其加入到存储过程中,以便获得更好的性能。下面是我在函数中编写的代码 Create function getlatestusernote(@warrantid varchar(20)) Returns varchar(300) As Begin Declare @latestnot
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
不是我想有一个相同的查询视图,请帮助我解决这个问题。
提前感谢。我从最受欢迎但不被接受的答案中选取了这个答案,您应该仔细研究,以便更好地了解另一个问题的情况,并对其进行了修改。当然,我没有办法测试这一点,但我相信这看起来是正确的。如果它不工作,请告诉我,我可以帮助排除故障
您应该能够基于此创建视图,然后查询该视图
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;
我已经从你的问题中删除了C标记,因为我不确定它是否相关。如果您确实需要它,请道歉。只需将表与其他表连接起来。我认为asp.net和.net标记也不相关。@bansi您是对的。我也把它们拿走了。如果您需要这些,请再次添加到op中,并解释为什么它们是相关的。谢谢。你们有关于担保ID和NotesCat列的索引吗?