使用IF/ELSE确定SELECT INTO语句

use*_*409 10 sql t-sql database sql-server if-statement

我有一些奇怪的问题,使用IF/ELSE来确定要执行哪一个或两个SELECT语句.我在运行完整语句时得到的错误消息是我的临时表已经存在,但如果我运行两个单独的IF语句的两个单独执行,则不会发生这种情况.

这是SQL Server中的代码:

IF (select BusinessDayCount from Calendartbl) <= 1
  BEGIN
    SELECT * into #temp1
    FROM PreviousMonthTbl
  END
ELSE
  BEGIN
    SELECT * into #temp1
    FROM CurrentMonthTbl
  END
Run Code Online (Sandbox Code Playgroud)

Ric*_*iwi 12

它是SQL Server中语法检查的"功能".您根本无法在同一批次中"创建"两次#temporary表.

这是您需要的模式.

SELECT * into #temp1
FROM PreviousMonthTbl
WHERE 1=0;

IF (select BusinessDayCount from Calendartbl) <= 1
  BEGIN
    INSERT into #temp1 SELECT *
    FROM PreviousMonthTbl
  END
ELSE
  BEGIN
    INSERT into #temp1 SELECT *
    FROM CurrentMonthTbl
  END
Run Code Online (Sandbox Code Playgroud)

如果您愿意,还可以将分支(在本例中)表示为WHERE子句:

SELECT * into #temp1
FROM PreviousMonthTbl
WHERE (select BusinessDayCount from Calendartbl) <= 1
UNION ALL
SELECT *
FROM CurrentMonthTbl
WHERE isnull((select BusinessDayCount from Calendartbl),2) > 1
Run Code Online (Sandbox Code Playgroud)