Sql server 更新时提供的列名称或值数与表定义不匹配

Sql server 更新时提供的列名称或值数与表定义不匹配,sql-server,stored-procedures,Sql Server,Stored Procedures,我在执行存储过程时遇到以下错误 Msg 213,16级,状态1,程序dbo.SP_PostYearDataCopy,第97行[批次起始行2] 提供的值的列名或数目与表定义不匹配 我的存储过程如下所示: ALTER PROCEDURE [dbo].[SP_PostYearDataCopy] AS BEGIN -- Declare the variable to be used. DECLARE @Year AS INT DECLARE @clubYear AS INT

我在执行存储过程时遇到以下错误

Msg 213,16级,状态1,程序dbo.SP_PostYearDataCopy,第97行[批次起始行2] 提供的值的列名或数目与表定义不匹配

我的存储过程如下所示:

ALTER PROCEDURE [dbo].[SP_PostYearDataCopy]
AS
BEGIN
    -- Declare the variable to be used.
    DECLARE @Year AS INT
    DECLARE @clubYear AS INT

    -- Initialize the variable.
    SET @Year = YEAR(GETDATE()) - 1;
    SET @clubYear = @Year + 1;

    CREATE TABLE #PLAYERTEMP
    (
         PlayerID INT,
         TeamID INT,
         Number INT,
         Year INT
    )

    ---- (STEP 2)
    ---- Create Process for Archiving Team Data and Create next years teams

    CREATE TABLE #TEAMTEMP 
    (
        teamTypeID INT, 
        TeamName VARCHAR(50),
        clubYear VARCHAR(50),
        Age VARCHAR(3), 
        Gender VARCHAR(50),
        Display BIT, 
        CoachID INT,
        CoachAsst INT,
        stateCupID INT,
        Manager VARCHAR(50),
        ManagerID INT,
        LeagueID INT,
        League2ID INT,
        League3ID INT,
        LeagueLink VARCHAR (250),
        LeagueLink2 VARCHAR (250),  
        LeagueLink3 VARCHAR (250),
        Callink VARCHAR (200),
        GotSoccer VARCHAR (250),
        Accomplishments VARCHAR (MAX), 
        Doc varchar(MAX), 
        DocName varchar (200), 
        DocType varchar (5)
    )        

    INSERT INTO #TEAMTEMP
        SELECT 
            teamTypeID, TeamName, clubYear, Age, Gender, Display, 
            CoachID, CoachAsst, stateCupID, Manager, ManagerID, 
            LeagueID, League2ID, League3ID, LeagueLink, LeagueLink2, LeagueLink3, 
            Callink, GotSoccer, Accomplishments, Doc, DocName, DocType
        FROM  
            dbo.Teams
        WHERE 
           (clubYear = @Year) AND (TeamTypeID = 3)

    UPDATE #TEAMTEMP 
    SET clubYear = @clubYear,
        Age = RIGHT(Age, 2) + 1,
        CoachID = NULL,
        CoachAsst = NULL,
        stateCupID = NULL,
        Manager = NULL,
        ManagerID = NULL  <--- LINE 97 --->

问题是我没有显式地设置字段以将值插入表中。表中添加了两个我忘记的新字段,ID字段没有设置为自动递增,所以我猜它也在寻找该字段的值


更正这些错误后,存储过程按预期运行。

消息非常清楚。检查你的插入声明我做了20次,没有发现任何遗漏。是吗?是的。INSERT语句看起来不错。尝试将查询复制到新的查询窗口,然后重试。您可能已经在当前会话查询窗口中创建了TEAMTEMP。您可以通过在当前查询窗口端执行SELECT*FROM TEAMTEMP来确认这一点注意:您不应该在存储过程中使用sp_uu前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用sp_u,并使用其他东西作为前缀——或者根本不使用前缀!始终列出列名是一个很好的教训。