SQL Server 存储过程创建临时表并插入值。

9
我正在尝试从不同的表中选择值并将其插入到临时表中。
我需要在临时表中使用一个标识字段。当我尝试执行以下代码时,它会抛出错误:
*Msg 2714, Level 16, State 1, Procedure SelectCashDetails, Line 27
There is already an object named '#ivmy_cash_temp1' in the database.*
即使我将临时表更改为不同的名称,它仍然会抛出相同的错误。
这是我的代码:
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

你在一个事务中多次调用它? - TomTom
2
你不需要在使用后删除临时表吗?即在存储过程结束时? - booyaa
3
在存储过程结束时,不需要删除临时表。 - Filip De Vos
1个回答

8
一个SELECT INTO语句可以为您创建表。不需要先用CREATE TABLE语句创建表。
发生的情况是,在CREATE语句中创建了#ivmy_cash_temp1,然后当执行SELECT INTO时,DB会尝试为您创建它。这会导致错误,因为它正在尝试创建已经创建过的表格。
要么消除CREATE TABLE语句,要么改变填充它的查询以使用INSERT INTO SELECT格式。
如果您需要在新行中添加唯一ID,则最好使用SELECT INTO...因为IDENTITY()只能与此语法一起使用。

嗨,Dave,我需要通过表格逐行进行操作......请给我一些建议... - Ivan
不要使用 SELECT IDENTITY( int ) AS id,CMM.movedate,.... INTO #ivmy_cash_temp1 等语句来填充数据表,而是使用 INSERT INTO #ivmy_cash_temp1 SELECT IDENTITY( int ) AS id,CMM.movedate,.... FROM 等语句。 - Dave K
谢谢你,Dave。我明白了...... 但是在我从临时表中选择值之后它没有显示任何值...... - Ivan
1
撤销我的上一个评论。当使用SELECT INTO语法时,仅使用SELECT IDENTITY()才有效。因此,请删除CREATE TABLE语句,只需使用SELECT INTO即可。 - Dave K
语法:SELECT * INTO #newtable FROM YOUR_TABLE; - Stefan Steiger
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接