在变量中存储对表的引用

问题描述 投票:0回答:2

我要实现的目标是从动态确定的表中查询。以下是我要完成的示例语法。


if exists (select * from tbl_first_option)
    set @tbl = tbl_first_option
else
    set @tbl = tbl_second_option

-- complex statement that selects from table
select * from @tbl

所以我可以使用

@tbl
而不是复制复杂的语句。 如果有更好/更简单的方法,请告诉我。

sql sql-server dynamic-sql
2个回答
0
投票

你需要像这样的动态 SQL 查询

declare @SQL nvarchar(1000)
declare @tbl varchar(50)

if exists (select * from tbl_first_option)
    set @tbl = 'tbl_first_option'
else
    set @tbl = 'tbl_second_option'
 
SET @SQL = 'SELECT * FROM ' + QUOTENAME(@tbl)
 
EXECUTE sp_executesql @SQL

-3
投票

是的,您可以使用最简单的方法及其 CASE 语句,如下所示

SELECT * FROM (CASE 
                     THEN EXISTS (SELECT * FROM tbl_first_option) THEN tbl_first_option
        ELSE tbl_second_option
    END
) AS tbl

如果第一个表可用,此查询将在第一个表上运行,如果不进入第一个表,则从第二个表运行。您还可以使用类似于此的 COALESCE 函数:

SELECT *
FROM COALESCE (tbl_first_option, tbl_second_option) AS tbl
© www.soinside.com 2019 - 2024. All rights reserved.