简体   繁体   English

SQL 列名或提供的值数量与表定义不匹配

[英]SQL Column name or number of supplied values does not match table definition

I'm getting this error when I try to run my stored procedure, I have checked that the inserts matches the select, which seemed to be the issue for most of the time this question is asked.当我尝试运行我的存储过程时遇到此错误,我检查了插入是否与选择匹配,这似乎是大多数时候问这个问题的问题。 As far as I can tell they match so something else must be wrong.据我所知,它们匹配,所以一定有其他问题。

Thanks in advance提前致谢

Error:错误:

Msg 213, Level 16, State 1, Procedure system_IncreaseCustomTariffs, Line 36 Msg 213, Level 16, State 1, Procedure system_IncreaseCustomTariffs, Line 36
Column name or number of supplied values does not match table definition.列名或提供的值数量与表定义不匹配。

Code:代码:

--This sp is used by doRateIncrease.exe
ALTER PROCEDURE [dbo].[system_IncreaseCustomTariffs]
            @Increase money,
            @ProgramType varchar(30),
            @StartDate varchar(10) = NULL,
            @StopDate varchar(10) = NULL,
            @Exclude varchar(1024) = ''
AS  
   SET NOCOUNT ON

   DECLARE @OldFreightId int, @CustFreightId int, @BillAcct int, @User varchar(30)

   SET @User = 'Increase_' + Replace(Convert(varchar(10), GetDate(), 101),'/', '-')

   --Delete existing tariffs
   DECLARE C1 CURSOR FOR 
        SELECT CustFreightId 
        FROM CustFreightProgramMaster 
        WHERE ProgramType = @ProgramType and CreateUsr = @User

   OPEN C1
   FETCH NEXT FROM C1 INTO @CustFreightId

   WHILE (@@FETCH_STATUS = 0)  
   BEGIN
       EXECUTE delete_CustFreightProgramMaster @CustFreightId = @CustFreightId

       FETCH NEXT FROM C1 INTO @CustFreightId
   END

   CLOSE C1
   DEALLOCATE C1

   --Load exclusion table
   CREATE TABLE #Exclude (parseValue VARCHAR(100))

   INSERT INTO #Exclude
       SELECT * 
       FROM dbo.Parse (@Exclude, ',')
       WHERE IsNull(parseValue,'') <> ''

--Get all active tariffs
DECLARE Increase CURSOR FOR 
    SELECT CustFreightId, BillAcct FROM CustFreightProgramMaster
        WHERE ProgramType = @ProgramType
          and Convert(varchar(10), GetDate(), 101) Between StartDate and StopDate

OPEN Increase
FETCH NEXT FROM Increase INTO @OldFreightId, @BillAcct
WHILE (@@FETCH_STATUS = 0)  
BEGIN
    --If BillAcct excluded from increase just extend stop date
    IF EXISTS (SELECT * FROM #Exclude WHERE Cast(parseValue as int)= @BillAcct)
    BEGIN
        --Extend existing tariff to new stop date
        UPDATE CustFreightProgramMaster
            SET StopDate = @StopDate
            WHERE CustFreightId = @OldFreightId
    END

    --Create new tariff
    ELSE
    BEGIN
        --Expire existing tariff 1 day prior to start on new tariff
        UPDATE CustFreightProgramMaster
            SET StopDate = DateAdd(day, -1, @StartDate)
            WHERE CustFreightId = @OldFreightId

        --Create new program master
        INSERT INTO CustFreightProgramMaster(BillAcct, ProgramType, BiDirect, StartDate, StopDate, 
                AbsoluteMinimum, MaxDiscount, MaxPalletWeight, CreateSvr, CreateTrm, CreateUsr, CreateDT)
            SELECT BillAcct, ProgramType, BiDirect, @StartDate, @StopDate, AbsoluteMinimum, 
                MaxDiscount, MaxPalletWeight, CreateSvr, CreateTrm, @User, GetDate()
            FROM CustFreightProgramMaster WHERE CustFreightId = @OldFreightId


        --Get new FreightId
        SET @CustFreightId = 0
        SET @CustFreightId = SCOPE_IDENTITY()

        IF IsNull(@CustFreightId,0) = 0
        BEGIN
            RAISERROR('Tariff not created.',16,1)
            RETURN
        END

        --Copy Origin Zones
        INSERT INTO CustFreightProgramOriginZones (CustFreightId, ZoneId, CreateSvr, CreateTrm, CreateUsr, CreateDT)
            SELECT @CustFreightId, ZoneId, CreateSvr, CreateTrm, @User, GetDate() 
            FROM CustFreightProgramOriginZones WHERE CustFreightId = @OldFreightId

        --Copy Destination Zones
        INSERT INTO CustFreightProgramDestZones (CustFreightId, ZoneId, CreateSvr, CreateTrm, CreateUsr, CreateDT)
            SELECT @CustFreightId, ZoneId, CreateSvr, CreateTrm, @User, GetDate() 
            FROM CustFreightProgramDestZones WHERE CustFreightId = @OldFreightId

        --Update Customer Program Master program description
        UPDATE CustFreightProgramMaster
            SET ProgramDesc = dbo.BuildCustFreightProgramDesc(CustFreightId)
            WHERE CustFreightId = @CustFreightId

        --Copy weight breaks, apply increase
        INSERT INTO CustFreightProgramWeightBreaks (CustFreightId, LowValue, HighValue, UnitCost, CreateSvr, CreateTrm, CreateUsr, CreateDT)
            SELECT @CustFreightId, LowValue, HighValue, dbo.IncreaseUnitCost(@ProgramType, UnitCost, @Increase), CreateSvr, CreateTrm, @User, GetDate() 
            FROM CustFreightProgramWeightBreaks WHERE CustFreightId = @OldFreightId

        --Copy pallet breaks, apply increase
        INSERT INTO CustFreightProgramPalletRates (CustFreightId, LowValue, HighValue, UnitCost, CreateSvr, CreateTrm, CreateUsr, CreateDT)
                SELECT @CustFreightId, LowValue, HighValue, dbo.IncreaseUnitCost(@ProgramType, UnitCost, @Increase), CreateSvr, CreateTrm, @User, GetDate() 
            FROM CustFreightProgramPalletRates WHERE CustFreightId = @OldFreightId
    END

    FETCH NEXT FROM Increase INTO @OldFreightId, @BillAcct
END

CLOSE Increase
DEALLOCATE Increase 

--Clean up
DROP TABLE #Exclude

Looks like the problem is here:看起来问题出在这里:

INSERT INTO #Exclude
    SELECT * FROM dbo.Parse (@Exclude, ',')
        WHERE IsNull(parseValue,'') <> ''

Maybe rather make it:也许不如让它:

INSERT INTO #Exclude
    SELECT [Value - Or name of first column] FROM dbo.Parse (@Exclude, ',')
        WHERE IsNull(parseValue,'') <> ''

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 SQL列名称或提供的值数与表定义不匹配 - The SQL Column name or number of supplied values does not match table definition 列名或提供的值数与表定义不匹配。 - Column name or number of supplied values does not match table definition. 列名或提供的值数与表定义不匹配 - Column name or number of supplied values does not match table definition 列名或提供的值数与表定义不匹配 - Column name or number of supplied values does not match table definition 列名或提供的值数量与表定义不匹配 - Column name or number of supplied values does not match table definition 列名或提供的值数与表定义错误不匹配 - Column name or number of supplied values does not match table definition error 列名或提供的值数与表定义不匹配(表定义与所提供的相同) - Column Name or number of supplied values does not match table definition (table definition is identical with what has been supplied) 使用C#的SQL插入-列名或提供的值数与表定义不匹配 - Sql insert using C# - Column name or number of supplied values does not match table definition SQL Server 2008列名或提供的值数与表定义不匹配 - SQL Server 2008 Column name or number of supplied values does not match table definition SQL INSERT:列名或提供的值数与表定义不匹配 - SQL INSERT: Column name or number of supplied values does not match table definition
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM