下面代码中的条件删除表行似乎不起作用。它执行时没有错误,但是下一行错误说对象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
此外,我尝试使用单引号或双引号转义表名,但总是相同的结果(它不会丢弃)。我发现方括号引发语法错误。
答案 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