从SQL View返回有限的记录

时间:2019-08-28 02:07:02

标签: sql sql-server tsql sql-server-2008-r2

我有一个简单的SQL视图,该视图具有SELECT语句,该语句从表中返回多个字段。名为vw_UserData的视图如下所示:

SELECT client.Lastname, client.Firstname, client.ClientID, client_image.Image 
FROM client
LEFT OUTER JOIN client_image ON client.ClientID = client_image.ClientID
WHERE client_image.Description LIKE '%PHOTO%

image字段是(image / blob)字段,视图返回的记录越多,运行时间就越长。

如果通过向其添加TOP 100并在WHERE子句中指定姓氏来运行此查询,则

SELECT TOP 100 client.Lastname
...
WHERE client_image.Description LIKE '%PHOTO%
AND client.lastname = 'smith'

它将返回所有以smith为姓氏的记录(计数= 64条记录)。

但是,当使用视图(使用TOP 100)运行SELECT并从WHERE中删除姓氏时

SELECT * FROM vw_UserData WHERE Lastname = 'smith' 

我只拿回一张唱片!为什么?此外,如果我有Todd Smith并跑步

SELECT * FROM vw_UserData WHERE Lastname = 'smith' and Firstname = 'todd'

我没有得到任何记录。我似乎无法在其中运行TOP 100的视图并使用该视图运行SELECT。如果未指定使用该视图的应用程序的WHERE标准,我希望能够限制返回的记录数-即,我不想返回所有记录,而是限制它们。但是,如果指定了条件,例如姓氏或名字,我想带回所有这些记录-最多100条,通常不会超过我们当前数据的记录。

我正在使用SQL Server 2008 R2。

1 个答案:

答案 0 :(得分:0)

谢谢大家。我们将在下一周左右升级到SQL Server 2017。我将等到那时,然后使用OFFSET FETCH子句来实现我所需的结果。