1

SQLServer2005で次のエラーメッセージが表示されます

メッセージ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 

満たされる - しかし、あなたは8つの値SELECTしか提供しません

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

あなたのステートメントから列( yoru の最初の列)に値を提供していないようです.....PolicyIDINSERTSELECT

更新:PolicyIDターゲット テーブルの列が「自動インクリメント」(またはIDENTITY) 列である場合、ステートメントに in を含めないでください。INSERT

これを使用するだけです:

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

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

PolicyIDステートメントからを省略するINSERTと、SQL Server が自動的にidentityそれに値を割り当てますが、8 つの列がINSERT .... SELECT必要な に 8 つの値を指定しているため、ステートメントは機能しません。INSERT

于 2012-10-25T08:19:26.820 に答える