1

我在 SQL Server 2005 中收到以下错误消息

消息 120,级别 15,状态 1,过程 EPIN,第 37 行
INSERT 语句的选择列表包含的项目少于插入列表。SELECT 值的数量必须与 INSERT 列的数量相匹配。

我已将选择列表和插入列表复制并粘贴到 excel 中,并验证每个列表中的项目数量相同。两个表的附加主键字段都没有在插入语句或选择列表中列出。我不确定这是否相关,但可能是可疑的。

这是我的存储过程的来源:

 set ANSI_NULLS ON
 set QUOTED_IDENTIFIER ON
 go

 -- =============================================
 -- Author:     Kristian Manuel
 -- Create date: 10/3/2012
 -- Description:    
 -- =============================================
 ALTER PROCEDURE [dbo].[EPIN] 
-- Add the parameters for the stored procedure here
     @PLUCODE varchar(30),      --Table tblPolicy
     @ECPAYFEES numeric(18,2),
     @COSTPAYABLE numeric(18,2),
     @RETAILPRICE numeric(18,2),
     @DENOMINATION varchar(50),
     @CARDNAME varchar(50),
     @DistributorID varchar(8),
     @AccntID decimal(18,0)

 --PO1  
 AS
 BEGIN
     -- SET NOCOUNT ON added to prevent extra result sets from
     -- interfering with SELECT statements.
     SET NOCOUNT ON;

     INSERT INTO [ECPAY-PC].[GENESIS].[dbo].[tblPolicy]
     ( 
       PolicyID                 ,
       AccountTID               ,
       DistributorID            ,
       CARDNAME                 ,
       DENOMINATION             ,
       RETAILPRICE              ,
       COSTPAYABLE              ,
       ECPAYFEES                ,
       PLUCODE 
     ) 
     SELECT 
         t.* 
     FROM
        (SELECT 
            AccountTID = @AccntID, 
            DistributorID = @DistributorID, 
            CARDNAME = @CARDNAME,      
            DENOMINATION = @DENOMINATION, 
            RETAILPRICE = @RETAILPRICE, 
            COSTPAYABLE = @COSTPAYABLE,      
            ECPAYFEES = @ECPAYFEES, 
            PLUCODE = @PLUCODE) t,
        [ECPAY-PC].[ECPNWEB].[dbo].[account] a
     WHERE
        a.AccntID = t.AccountTID --for account
 END
4

1 回答 1

4

错误消息非常清楚 - 您的INSERT语句需要9 列

   1. PolicyID                 
   2. AccountTID               
   3. DistributorID            
   4. CARDNAME                 
   5. DENOMINATION             
   6. RETAILPRICE              
   7. COSTPAYABLE              
   8. ECPAYFEES                
   9. PLUCODE 

要填写 - 但您SELECT只提供8 个值

   1. AccountTID               
   2. DistributorID            
   3. CARDNAME                 
   4. DENOMINATION             
   5. RETAILPRICE              
   6. COSTPAYABLE              
   7. ECPAYFEES                
   8. PLUCODE 

看来您没有为您的声明中的PolicyID列( yoru 中的第一列)提供任何值.....INSERTSELECT

更新:如果您PolicyID的目标表中的列是“自动增量”(或IDENTITY)列 - 那么您不能在您的INSERT语句中包含!

只需使用这个:

 INSERT INTO [ECPAY-PC].[GENESIS].[dbo].[tblPolicy]
 (AccountTID, DistributorID, CARDNAME, DENOMINATION,
  RETAILPRICE, COSTPAYABLE, ECPAYFEES, PLUCODE)

    SELECT (that provides those 8 values) .... 

如果您PolicyIDINSERT语句中省略了,那么 SQL Server 将自动为其分配一个identity值,并且您的INSERT .... SELECT语句将不起作用,因为您向INSERT需要 8 列的 an 提供 8 个值...

于 2012-10-25T08:19:26.820 回答