我有一个简单的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。
答案 0 :(得分:0)
谢谢大家。我们将在下一周左右升级到SQL Server 2017。我将等到那时,然后使用OFFSET FETCH子句来实现我所需的结果。