我有一个存储过程,如果当时代码中该表不存在,我将在其中创建一个表(尝试从其他表中首先选择top 0 *,但结果相同)。
该表将用于通过不同的选择将数据插入到该表中,但是可能会出现第一个选择,因为该特定选择没有数据。
因为我的想法很简单,如果每个选择的代码中都不存在它,就可以创建它。
但是当我尝试运行它时,我得到:
数据库中已经有一个名为“ ## TOTAL_SELECTION”的对象。
谁能告诉我我做错了什么或者我该如何解决? 在我看来,这很合逻辑,因为只有在表不存在时才创建表。
IF (SELECT COUNT(*) FROM TEMPDB.SYS.OBJECTS WHERE NAME = '##TOTAL_SELECTION' AND TYPE = 'U' ) = 0
BEGIN
CREATE TABLE ##TOTAL_SELECTION (ID NUMERIC(14,0), TYPE VARCHAR(100) )
END
--INSERT DATA INTO THE TABLE
/* SOME OTHER CODE */
IF (SELECT COUNT(*) FROM TEMPDB.SYS.OBJECTS WHERE NAME = '##TOTAL_SELECTION' AND TYPE = 'U' ) = 0
BEGIN
CREATE TABLE ##TOTAL_SELECTION (ID NUMERIC(14,0), TYPE VARCHAR(100) )
END
--INSERT DATA INTO THE TABLE
/* SOME moreCODE */
答案 0 :(得分:0)
如果您需要再次使用该表插入其他数据,还可以执行以下截断操作:
--This will remove all the content of your table.
truncate table ##TOTAL_SELECTION
而不是尝试重新创建它,因为您无法多次创建具有相同名称的表(即使它是临时的)。您可以通过在临时表的名称中添加数字(## Total_Selection1,## Total_Selection2等)来欺骗它。
另外,请使用以下条件代替select count(*) ... = 0
:
IF OBJECT_ID('tempdb..##TOTAL_SELECTION ' , 'U') IS NOT NULL
drop TABLE ##TOTAL_SELECTION