我在 SQL Server 工作。我有 3 个临时表:#t1、#t2 和 #t3。它们在架构上都是相同的。如果满足某些条件,我需要将#t1 设置为#t2;否则,我需要将#t1 设置为#t3。我怎样才能做到这一点?我试过一个 if-else 语句,但它不喜欢第二个 INTO 语句。
IF @a = 1
SELECT * INTO #t1 FROM #t2
ELSE
SELECT * INTO #t1 FROM #t3
;
答案 0 :(得分:2)
这不是一个好的做法,但这应该可以解决错误。
select * into #t1 from (
select * from #t2 where @a = 1 union all
select * from #t3 where @a <> 1 or @a is null
) t;
更好的方法是显式创建表并通过 insert
添加行。您还应该评估为什么有必要使用这些相同的表格。
答案 1 :(得分:1)
您可以设置一个带有条件的表名变量,然后使用EXEC函数将表名作为变量使用。像这样:
DECLARE @tb NVARCHAR(3)
IF (@a = 1) SET @tb = '#t2'
ELSE SET @tb = '#t3'
EXEC('SELECT * INTO #t1 FROM ' + @tb)