这是我的场景。(以下是我的存储过程,将@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
感谢大家的投入。希望这能帮助到别人。