Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用临时表插入存储过程_Sql_Sql Server - Fatal编程技术网

Sql 使用临时表插入存储过程

Sql 使用临时表插入存储过程,sql,sql-server,Sql,Sql Server,我有一个视图,我正试图在SQL中声明为临时表。我正在声明它,但我得到的错误是必须声明标量变量@temp。我不太清楚为什么会发生这种错误。下面是我的存储过程代码。最终目标是能够在存储过程中的插入上使用此临时表的值 USE [DATABASE] GO SET ANSI_NULLS OFF GO SET QUOTED_IDENTIFIER OFF GO ALTER PROCEDURE [dbo].[procInsertDriveTimeClaimComponents] AS DEC

我有一个视图,我正试图在SQL中声明为临时表。我正在声明它,但我得到的错误是必须声明标量变量@temp。我不太清楚为什么会发生这种错误。下面是我的存储过程代码。最终目标是能够在存储过程中的插入上使用此临时表的值

USE [DATABASE]

GO

SET ANSI_NULLS OFF

GO

SET QUOTED_IDENTIFIER OFF

GO

ALTER PROCEDURE [dbo].[procInsertDriveTimeClaimComponents]
AS
    DECLARE @Iterator INT
    DECLARE @RowCount INT
    DECLARE @temp TABLE
      (
         RowIterator INT,
         intClaimNum INT,
         chrStsCode  VARCHAR(50),
         chrContNum  VARCHAR(5),
         chrCvgCode  VARCHAR(5),
         intContCode INT,
         chrContSfx  VARCHAR(5),
         chrDlrNum   VARCHAR(5),
         chrPgmCode  VARCHAR(15),
         chrVersion  VARCHAR(15),
         chrCvgType  VARCHAR(15),
         chrRONum    VARCHAR(15),
         dtmRODate   DATETIME,
         intCheckNum INT
      );

    SET @Iterator = 1
    SET @RowCount = (SELECT COUNT(*)
                     FROM   viewDriveTimeContracts)

    WHILE ( @Iterator <= @RowCount )
      INSERT INTO @temp
                  (RowIterator,
                   intClaimNum,
                   chrStsCode,
                   chrContNum,
                   chrCvgCode,
                   intContCode,
                   chrContSfx,
                   chrDlrNum,
                   chrPgmCode,
                   chrVersion,
                   chrCvgType,
                   chrRONum,
                   dtmRODate,
                   intCheckNum)
      SELECT *
      FROM   viewDriveTimeClaimRows
      WHERE  RowIterator = @Iterator

  BEGIN
      INSERT INTO tblClaimComponents
      VALUES      ('CR',
                   @temp.intClaimNum,
                   '999999',
                   'Description',
                   @temp.chrCvgCode,
                   @temp.intContCode,
                   @temp.chrContNum,
                   @temp.chrContSfx,
                   @temp.chrDlrNum,
                   @temp.chrPgmCode,
                   @temp.chrVersion,
                   @temp.chrCvgType,
                   'Complaint',
                   @temp.chrRONum,
                   @temp.dtmRODate,
                   'A',
                   0,
                   0,
                   0,
                   'N',
                   0,
                   0,
                   0,
                   1,
                   'Y',
                   0,
                   '',
                   '',
                   '',
                   0,
                   0,
                   'N',
                   'N',
                   0,
                   'ZINGO',
                   '01/01/2014',
                   'ZINGO',
                   '01/01/2014',
                   'PD',
                   1,
                   NULL,
                   NULL,
                   0,
                   '90444444',
                   NULL,
                   NULL,
                   NULL,
                   NULL,
                   0,
                   0,
                   0,
                   0,
                   0,
                   0,
                   0,
                   0,
                   NULL,
                   '01/01/2014',
                   'Zingo',
                   'COMMENT',
                   '')

      SET @Iterator = @Iterator + 1
  END 
@temp是一个表变量,因此如果使用该变量中的列,则需要将该变量放入from子句中。因此,您的最后一条insert语句应该如下所示:

insert into tblClaimComponents values 
select 'CR', intClaimNum, '999999', 'Description', chrCvgCode .... --Other values here
from @temp

为什么需要插入到表变量中,然后从该变量插入到tblClaimComponents,而不是直接插入?为什么需要在过程循环中执行此操作,而不是基于集合?