使用具有相同名称的临时表SQL Server时出错



这是我的场景。(以下是我的存储过程,将@date作为输入参数)

DECLARE @date DATE
If object_id('tempdb..#TempList') is not null drop table #TempList
go
Create table #TempList (MILL_NO VARCHAR(7), SHIP_DATE DATE, BL_STATUS NCHAR(1), 
FOOTAGE DECIMAL(12,4))
If @date IS NULL
Insert into #TempList
Select mill_no, null, bl_status,footage from fn_A(0,0)
Select * from #TempList

If object_id('tempdb..#TempList') is not null drop table #TempList
go
Create Table #TempList (MILL_NO VARCHAR(7), SHIP_DATE DATE, BL_STATUS NCHAR(1),
FOOTAGE DECIMAL(12,4))
If @date IS NOT NULL
Insert into #TempList
Select * from fn_B(0,'06/06/2006')
Select * from #TempList

我从一篇帖子中发现,除非包含GO,否则我不能使用同名的临时表。然而,包括GO并没有采取我试图通过的参数。

是否有其他方法可以消除此错误?

根据提供的过程,您可以使用TRUNCATE TABLE

如果你只想快速删除记录,我认为删除并重新创建一个表没有任何意义。

编辑

您不会删除并重新创建具有相同名称的表;而不是这个代码:

If object_id('tempdb..#TempList') is not null drop table #TempList go  
Create Table #TempList (
    MILL_NO VARCHAR(7), 
    SHIP_DATE DATE, 
    BL_STATUS NCHAR(1), 
    FOOTAGE DECIMAL(12,4)
)

只需这样做:

TRUNCATE TABLE #TempList 

if object_id('tempdb..#TempList')始终为NULL,因为#TempList不是执行create table #TempList 时在tempdb的sysobjects表上创建的名称

编辑
这个怎么样:

CREATE PROC PIRULO(@date as DATE) as
Create table #TempList (MILL_NO VARCHAR(7), SHIP_DATE DATE, BL_STATUS NCHAR(1), FOOTAGE DECIMAL(12,4))
IF @date IS NULL
    Insert into #TempList
    Select mill_no, null, bl_status,footage from fn_A(0,0)
ELSE
    Insert into #TempList
    Select * from fn_B(0,'2006/06/06')    -- also I changed date order.
Select * from #TempList

这些天来,当满足给定条件时,我一直在努力将值插入到同一个临时表中。

考虑到我正在进行一个将FoxPro(到处都声明了游标)迁移到SQL Server的项目,这个小逻辑需要在多个存储的proc中实现。

最后,我从中学到了——在尝试任何不同的东西之前都要三思而后行(建议我的DB迁移初学者)。

DECLARE @date DATE
SET @date = '06/06/2006'    --@date = null
If object_id('tempdb..#TempList') is not null drop table #TempList
Create table #TempList (MILL_NO VARCHAR(7), SHIP_DATE DATE, BL_STATUS NCHAR(1), 
FOOTAGE DECIMAL(12,4))
If @date = null
-- Here I am inserting null in place of Ship_Date because fn_A returns only 3 columns in my case
Insert into #TempList
Select mill_no, null, bl_status,footage from fn_A(0,0)
--Select * from #TempList
else
Insert into #TempList
Select * from fn_B(0,@date)
Select * from #TempList

感谢大家的投入。希望这能帮助到别人。

最新更新