删除后SQL Server全局临时表仍然存在

时间:2016-07-28 10:29:07

标签: c# sql-server

我目前正在尝试在SQL Server中运行一些查询。在查询中有一个像这样的部分:

protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e)
{
    if (e.Item.IsInEditMode) 
    {
        GridEditableItem editItem = (GridEditableItem)e.Item;
        RadComboBox combo = (RadComboBox)editItem.FindControl("updateComboBox"); 
        combo.DataBind(); 
        combo.SelectedValue = DataBinder.Eval(editItem.DataItem,"ID").ToString();
    }
}

问题是我不断收到一些错误,说... IF EXISTS(SELECT * FROM tempdb.dbo.sysobjects WHERE id = object_id(N'tempdb.dbo.[##Emp]')) DROP TABLE ##Emp SELECT * INTO ##Emp FROM #Emp (nolock) ... 已经存在。当我用##Emp检查它时,这件事怎么可能?我甚至尝试删除IF EXIST DROP部分并手动删除表格,但它仍然表示该表已经存在。

1 个答案:

答案 0 :(得分:0)

使用简单的

检查两者临时表状态
select * from tempdb..sysobjects where name like '%Emp%'

然后为

处理删除和娱乐
BEGIN TRANSACTION
    ...
    IF EXISTS(SELECT * FROM tempdb..sysobjects WHERE id = object_id(N'tempdb..[#Emp]'))
        DROP TABLE #Emp
    CREATE TABLE #Emp(exampleId uniqueidentifier);
    ...
    IF EXISTS(SELECT * FROM tempdb.dbo.sysobjects WHERE id = object_id(N'tempdb.dbo.[##Emp]')) 
        DROP TABLE ##Emp   

    SELECT * 
    INTO ##Emp 
    FROM #Emp
    ...
COMMIT TRANSACTION

正如@ damien-the-unbeliever所指出的那样,全球可见的临时表可能非常麻烦,请仔细检查是否真的需要它。
在这种情况下,拥有这样相似的名字也很困惑......