2

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

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

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

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

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

请问我可以解决这个问题吗?

谢谢你。

4

2 回答 2

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
于 2012-06-18T19:09:22.137 回答
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 代码的直译可能会导致您陷入低效且无法维护的混乱局面。

于 2012-06-18T19:11:56.483 回答