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

投稿の1つから、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 に移行するプロジェクトに参加していることを考えると、この小さなロジックを複数のストアド プロシージャに実装する必要がありました。

最後に、このことから私が学んだことは、何か違うことを試す前にまっすぐに考える (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

ご意見をお寄せいただきありがとうございます。これが誰かに役立つことを願っています。

于 2012-07-20T12:55:28.557 に答える