将表达式存储在SQL中的变量中

Red*_*Taz 1 t-sql sql-server

鉴于IN接受格式的参数,(subquery | expression [ ,...n ])表达式是否可以存储在变量中以供重用?

例如(警告;这是设计的):

declare @expression ?expression_type?
declare @test int

set @expression = (44, 132, 133, 166, 167, 168, 169, 170)
set @test = 44

if @test in @expression begin
    -- do something
end

if @test not in @expression begin
    -- do something else
end
Run Code Online (Sandbox Code Playgroud)

我试图通过不复制表达式来保持代码可维护性.但是,这个目标是一个可以多次调用的函数,因此我不想求助于将这些ID存储在表(永久或临时)中,因为这会导致不必要的读取.

Mat*_*att 5

我认为表变量可以很好地处理这个问题.

declare @expression table (value INT)
declare @test int

insert into @expression (value) values (44), (132), (133), (166), (167), (168), (169), (170)
set @test = 44

if @test in (select value from @expression) begin
-- do something
end

if @test not in (select value from @expression) begin
-- do something else
end
Run Code Online (Sandbox Code Playgroud)