我要实现的目标是从动态确定的表中查询。以下是我要完成的示例语法。
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 查询
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
是的,您可以使用最简单的方法及其 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