簡體   English   中英

使用IF / ELSE確定SELECT INTO語句

[英]Using IF / ELSE to determine a SELECT INTO 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

它是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

如果您願意,還可以將分支(在本例中)表示為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

對於同一批次中具有相同名稱的表,不能使用SELECT INTO。 為臨時表使用不同的名稱

IF EXISTS(
          SELECT 1    
          FROM Calendartbl
          WHERE BusinessDayCount <= 1
          )
BEGIN
  IF OBJECT_ID('tempdb.dbo.#PreviousMonthTbl') IS NULL DROP TABLE dbo.#PreviousMonthTbl
  SELECT *
  INTO #PreviousMonthTbl
  FROM PreviousMonthTbl
END
ELSE
BEGIN
  IF OBJECT_ID('tempdb.dbo.#CurrentMonthTbl') IS NULL DROP TABLE dbo.#CurrentMonthTbl  
  SELECT *
  INTO #CurrentMonthTbl
  FROM CurrentMonthTbl
END

據我所知,問題是:

當你運行以下聲明時,

SELECT * into #temp1 FROM CurrentMonthTbl

你正在創建一個臨時表。

如果在該行之前有一個create table語句,那么這個Select into語句將失敗,因為該表已經存在。

如果在您的情況下您已經創建了臨時表,請嘗試替換:

SELECT * into #temp1 FROM CurrentMonthTbl

有:

Insert into #temp1
    Select * from CurrentMonthTbl

另請參閱數據庫中已有一個名為“## Temp”的對象

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM