Sql server 如何确保在视图中首先计算特定的WHERE条件

Sql server 如何确保在视图中首先计算特定的WHERE条件,sql-server,tsql,view,where-clause,openquery,Sql Server,Tsql,View,Where Clause,Openquery,考虑以下观点: create view x as select 1 as [source],* from some_table union all select 2,* from some_other_table 当我跑的时候 select * from x where source=1 我是否可以确保甚至没有执行select 2..查询 原因是在我的例子中,这是一个速度缓慢的openquery,我希望避免这种情况。您可以这样做,但我不知道这是否满足您可能有的其他要求-否则您可以创建两个视图

考虑以下观点:

create view x as
select 1 as [source],* from some_table
union all
select 2,* from some_other_table
当我跑的时候

select * from x where source=1
我是否可以确保甚至没有执行
select 2..
查询


原因是在我的例子中,这是一个速度缓慢的openquery,我希望避免这种情况。

您可以这样做,但我不知道这是否满足您可能有的其他要求-否则您可以创建两个视图

CREATE proc dbo.usp_selectspecificquery 

@source int
AS

BEGIN

IF(@source = 1)
BEGIN

Select 1 as source, * from some_table

END
ELSE
Select 1 as source,* from some_table

union all
select 2 as source,* from some_other_table
END

exec dbo.usp_selectspecificquery 1

不,它将编译整个查询。将查询放入存储过程并将其参数化。如果source=1,只做一个select,如果你愿意,我想这就回答了我的问题。