別のテーブルから値を選択して、一時テーブルに挿入しようとしています。
一時テーブルにIDフィールドが必要です。次のコードを実行しようとすると、エラーがスローされます。
*メッセージ2714、レベル16、状態1、プロシージャSelectCashDetails、行27
データベースにはすでに「#ivmy_cash_temp1」という名前のオブジェクトがあります。*
同じエラーがスローされた後でも、一時テーブルを別の名前に変更しようとしています。
これは私のコードです:
ALTER PROCEDURE [dbo].[SelectCashDetails]
(
@trustcompanyid BigInt,
@trustaccountid BigInt,
@planid BigInt,
@fromdate varchar(20),
@todate varchar(20),
@movetype varchar(20),
@typedesc varchar(20)
)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
CREATE TABLE #ivmy_cash_temp1
( tmovedate datetime,
tmovedesc varchar(20),
tmoneymovetype varchar(20),
tplanbal decimal(18,6),
tsourcetype BigInt,
tdestinationtype BigInt)
SELECT
IDENTITY(int) AS id,
CMM.movedate,
CDCP.paramdesc,
CMM.movementtypecd,
CMM.amountmoved,
CMM.planbalance,
cmm.sourceaccounttypeid,
cmm.destinationaccounttypeid
into #ivmy_cash_temp1
from
cash_moneymove CMM
inner join
CDC_PARAMETERS CDCP on CMM.movedescriptioncd=CDCP.paramcd
where
CMM.movedescriptioncd = @typedesc
and PARAMNAME = 'Cash AccountType Desc'
select * from #ivmy_cash_temp1
END
_SELECT INTO
_ステートメントは、テーブルを作成します。事前に_CREATE TABLE
_ステートメントを使用する必要はありません。
起こっているのは、CREATE
ステートメントで_#ivmy_cash_temp1
_を作成し、_SELECT INTO
_を実行すると、DBがそれを作成しようとすることです。これにより、既に作成したテーブルを作成しようとしているため、エラーが発生します。
_CREATE TABLE
_ステートメントを削除するか、それを埋めるクエリを変更して_INSERT INTO SELECT
_形式を使用します。
新しい行に一意のIDを追加する必要がある場合は、IDENTITY()
がこの構文でのみ機能するため、_SELECT INTO
_...を使用するのが最善です。