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