尽管有 drop 语句,数据库中已经有一个名为“#xxx”的对象

There is already an object named '#xxx' in the database despite drop statement

我有一个存储过程,其中在 if else 块中有两个 INSERT INTO 语句,一个发生在 if 中,另一个发生在 else 所以他们不会发生冲突。但是在编译时,从 else 部分的那个它给出了 Is already an object named '#xxx' 尽管它前面有一个 drop 语句。

    IF OBJECT_ID('tempdb..#xxx') IS NOT NULL
        DROP TABLE #xxx

    SELECT *
    INTO #xxx
    FROM FamilyDetails_tbl FD(NOLOCK)

有人能帮忙吗?

将您的 select 语句放入 exec 命令中,如下所示:

exec('SELECT *
    INTO #xxx
    FROM FamilyDetails_tbl FD(NOLOCK)')

您可以在 Transact-SQL 批处理中执行命令字符串或字符串。

IF OBJECT_ID('tempdb..#xxx') IS NOT NULL        
    EXEC ('SELECT 1 AS Col1 INTO #xxx')         -- IF condition
ELSE 
    EXEC ('SELECT 2 AS Col2 into #xxx')         -- ELSE condition

您是否试过像这样在 tempdb 前面添加 "N" : IF OBJECT_ID(N'tempdb..#xxx') 不为空

它会像 ydoow 在上面建议的那样使用 EXEC 命令工作,但是如果您在该特定数据库中没有 EXEC 权限,那么唯一的选择就是像下面这样写。

如果 ('Condition') 开始 如果 OBJECT_ID('tempdb..#xxx') 不为空 丢弃 TABLE #xxx SELECT *进入#xxx 从表 1 哪里 'some condition' 结尾 别的 开始 如果 OBJECT_ID('tempdb..#xxx') 不为空 丢弃 TABLE #xxx SELECT *进入#xxx 从表 1 哪里 'some condition' 结束