SQL中具有相同名称的两个临时表

时间:2012-06-18 18:45:49

标签: sql sql-server foxpro

我们正在将foxpro数据库重写为SQL。我遇到了以下情况。 Foxpro可以在两个不同的if语句下创建两个具有相同名称的游标。

我试图在SQL中做同样的事情。创建了两个临时表。如下所示:

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

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

NEXT在这里,我编写了一个代码,用另一列更新临时表列的值。但是sql抛出一个错误,说'数据库中已经有一个名为#abc的对象'。

我能解决这个问题吗?

谢谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

对于您的特定用例,假设两者具有相同的结构,您可以使用。

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

避免遇到的解析器问题。我同意Ben的评论,虽然FoxPro代码的字面翻译可能会导致你效率低下且难以维护。