2012-06-18 2 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' обе имеют одинаковую структуру? И какие СУБД вы используете сейчас? SQL Server? –

+4

Не делайте прямого преобразования из foxpro. Если вы знаете, что хотите на выходе, чтобы работать с этим, и игнорировать способ FoxPro делать вещи (очевидно, не игнорируйте логику 0. Ваш код должен быть примерно 1/20 размера и намного проще в обращении. – Ben

+0

Мартин, я использую 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 
Смежные вопросы