已经有一个名为## ObjectName

时间:2019-04-04 15:06:40

标签: sql sql-server

我有一个存储过程,如果当时代码中该表不存在,我将在其中创建一个表(尝试从其他表中首先选择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 */

1 个答案:

答案 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