我们正在将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的对象'。
我能解决这个问题吗?
谢谢。
答案 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代码的字面翻译可能会导致你效率低下且难以维护。