8

我正在尝试从不同的表中选择值并将其插入到临时表中。

我需要临时表中的标识字段。当我尝试执行以下代码时,它会引发错误:

*消息 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
4

1 回答 1

8

一条SELECT INTO语句为您创建表。不需要CREATE TABLE事先声明。

发生的事情是您在语句中创建#ivmy_cash_temp1CREATE然后数据库在您执行SELECT INTO. 这会导致错误,因为它正在尝试创建您已经创建的表。

消除该CREATE TABLE语句或更改填充它的查询以使用INSERT INTO SELECT格式。

如果您需要将唯一 ID 添加到新行,那么最好使用SELECT INTO... 因为IDENTITY()仅适用于此语法。

于 2013-01-15T08:56:46.240 回答