1

这是我的场景。(以下是将@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 并没有采用我尝试传递的参数。

是否有替代方法来消除此错误?

4

3 回答 3

2

根据提供的过程,您可以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 
于 2012-07-19T14:43:34.180 回答
0

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

编辑
这个怎么办:

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
于 2012-07-19T14:49:26.323 回答
0

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

鉴于我正在将 FoxPro(已声明游标)迁移到 SQL Server 的项目中,这个小逻辑需要在多个存储过程中实现。

最后,我从中学到的是 - 在尝试任何不同的东西之前先思考一下(对我的数据库迁移初学者的建议)。

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

感谢大家提供您的意见。希望这可以帮助某人。

于 2012-07-20T12:55:28.557 回答