2012-06-18 17 views
2

我們正在將一個foxpro數據庫重寫爲SQL。我遇到以下情況。 Foxpro可以在兩個不同的if語句下創建兩個具有相同名稱的遊標。在SQL中有兩個同名的臨時表

我試圖在SQL中做同樣的事情。創建了兩個臨時表。像下面這樣:

IF @id = 1 
BEGIN 
SELECT * INTO #abc from table1 
END 

IF @id = 2 
BEGIN 
SELECT * INTO #abc frm table2 
END 

下一步我在這裏寫一個代碼來更新與另一列的臨時表列的值。但是sql會引發一個錯誤,說'數據庫中已經有一個名爲#abc的對象'。

我可以請一個解決方案嗎?

謝謝。

+0

'table1'和'table2'是否都有相同的結構?你現在還在用什麼RDBMS? SQL Server? –

+4

不要直接從foxpro轉換。如果你知道你想在輸出上做什麼,並忽略FoxPro的做事方式(顯然不要忽略邏輯0,你的代碼應該是大小的1/20,並且更容易處理。) – Ben

+0

Martin,我使用的是SQL Server,是的,兩個表都有相同的結構。 – rock

回答

3

對於您的具體使用情況,您可以使用相同的結構。

IF @id IN (1, 2) 
    BEGIN 
     SELECT * 
     INTO #abc 
     FROM table1 
     WHERE @id = 1 
     UNION ALL 
     SELECT * 
     FROM table2 
     WHERE @id = 2 
    END 

以避免遇到的解析器問題。我同意本的評論,儘管直接翻譯FoxPro代碼很可能會導致你的低效和不可維護的混亂。

+0

這個工作如果我的表結構是相同的。我有類似的要求,除了我現在有不同的表結構。 – rock

3

不是使用SELECT INTO創建表,爲什麼不先定義表,然後INSERT(假設臨時表結構對於兩者都是相同的)?

CREATE TABLE #abc (Col1 Int, Col2 varchar(50)) 

IF @id = 1 
BEGIN 
    INSERT INTO #abc SELECT * from table1 
END 

IF @id = 2 
BEGIN 
    INSERT INTO #abc SELECT * from table2 
END 
相關問題