Таким образом, пример использования следующий: есть некоторый параметр, на основе которого я хочу выбрать данные из одной таблицы.
create table dbo.TEST1 (id int primary key, name nvarchar(128))
create table dbo.TEST2 (id int primary key, name nvarchar(128))
Поэтому я создал такую функцию:
create function [dbo].[f_TEST]
(
@test bit
)
returns table
as
return (
select id, name from TEST1 where @test = 1
union all
select id, name from TEST2 where @test = 0
)
Когда я запускаю его с константой, план выполнения велик - проверяется только одна таблица
select * from dbo.f_TEST(1)
Но тогда, когда я использую переменную, план не так хорош - обе таблицы сканируются
declare @test bit = 1
select * from dbo.f_TEST(@test)
Итак, есть ли какие-либо подсказки (или трюки), чтобы заставить SQL Server понять, что в определенном запросе нужно сканировать только одну таблицу?