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

时间:2016-06-06 05:30:10

标签: sql sql-server temp-tables

我有一个存储过程,其中INSERT INTO if块中有两个else语句,一个发生在if,另一个发生在else,所以他们不会发生冲突。但是在编译时,从其他部分的编译中,它已经有一个名为'#xxx'的对象,尽管它前面有一个drop语句。

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

    SELECT *
    INTO #xxx
    FROM FamilyDetails_tbl FD(NOLOCK)

有人可以帮忙吗?

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

您可以在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

答案 2 :(得分:0)

您是否尝试在tempdb前添加“N”,如下所示:     如果OBJECT_ID(N'tempdb ..#xxx')IS NOT NULL

答案 3 :(得分:0)

它会像ydoow上面用EXEC命令建议的那样工作,但是如果你在那个特定的数据库中没有EXEC权限,那么只能选择如下所示。

IF('条件') 开始      IF OBJECT_ID('tempdb ..#xxx')IS NOT NULL           DROP TABLE #xxx      选择           * INTO #xxx      从表1      什么'有些条件' 结束 其他 开始      IF OBJECT_ID('tempdb ..#xxx')IS NOT NULL           DROP TABLE #xxx      选择           * INTO #xxx      从表1      什么'有些条件' END