临时表不会丢失

时间:2014-10-31 20:07:23

标签: sql sql-server ado temp-tables drop-table

下面代码中的条件删除表行似乎不起作用。它执行时没有错误,但是下一行错误说对象ID已经存在 - 所以它实际上并没有丢弃表。

有什么想法吗?

我使用ADO通过OLE DB(SQLOLEDB提供程序)连接到MS SQL Server 2005数据库。

'Create a temporary table on the SQL Server and insert into it the info for the end part
With ADOcmA
    Set .ActiveConnection = mObjCON
    .CommandType = adCmdText
    .CommandText = "IF OBJECT_ID('" & TEMPTABLE & "') IS NOT NULL DROP TABLE " & TEMPTABLE
    .Execute
    .CommandText = "CREATE TABLE " & TEMPTABLE & " (ITEM VARCHAR(255),DESCRIP1 CHAR(255),DESCRIP2 CHAR(255), LEV INT, SEQ VARCHAR(255), FLAG1 TINYINT, PRIMARYKEY INT IDENTITY(1,1) PRIMARY KEY,QTY_PER FLOAT)"
    .Execute
    .CommandText = "Insert Into " & TEMPTABLE & " (ITEM,DESCRIP1,DESCRIP2,LEV,SEQ,FLAG1,QTY_PER) select item_no,Item_desc_1,Item_desc_2,1,1,'1',1 FROM " & cstrMACtItem & " WHERE Item_no ='" & strITEM & "' "
    .Execute
End With

FWIW使用格式#[WSID]TEMP[NOW]在运行时创建临时表名称并截断为116个字符,例如:TEMPTABLE=#LOKSPEC1TEMP141031155408

此外,我尝试使用单引号或双引号转义表名,但总是相同的结果(它不会丢弃)。我发现方括号引发语法错误。

3 个答案:

答案 0 :(得分:2)

将临时表删除查询更改为此

 CommandText = "IF OBJECT_ID('tempdb.." & TEMPTABLE & "') IS NOT NULL DROP TABLE " & TEMPTABLE

答案 1 :(得分:2)

在当前工作数据库之外的其他地方,Sql创建以井号开头的表。因此,如果要查询临时表的架构信息,则需要显式引用该其他数据库。你可能更容易看到你是否像这样调整了代码

.CommandText = "IF OBJECT_ID('tempdb.." & TEMPTABLE & "') IS NOT NULL DROP TABLE " & TEMPTABLE

答案 2 :(得分:0)

我还找到了另一种方法,通过查看相同的tempdb位置来工作。

.CommandText = "IF EXISTS (SELECT * FROM TEMPDB.SYS.TABLES WHERE NAME LIKE '" & TEMPTABLE & "%') DROP TABLE " & TEMPTABLE
.Execute