存储过程:创建后无法执行

Stored Procedure: Unable to execute after creation

我创建了一个存储过程,它做四件事:

  1. 创建 table
  2. 用新列
  3. 更改创建的table
  4. 根据条件更新新列
  5. 再次更改 table 以删除一列。

我创建了存储过程但无法执行。我得到这个错误

Column name or number of supplied values does not match table definition'

我已经检查了所有列及其数据类型以确保它们匹配,所以我不知道哪里出了问题。这是我第一次写存储过程,所以可能是我的代码结构完全错误。我在这里附上了一个显示基本结构的简化代码,我希望有人可以看看结构是否正确并阐明一些信息!

非常感谢

米歇尔

SET ANSI_NULLS ON
GO

CREATE PROCEDURE myStoredProcedure 
AS
BEGIN
    SET NOCOUNT ON

    IF OBJECT_ID('newTable') IS NULL 
    BEGIN
        CREATE TABLE newTable 
        (
            [name] [nvarchar] (256) NOT NULL,
            [id] [int] NOT NULL,
            [date] [datetime2] (7) NULL 
        )
    END;

    TRUNCATE TABLE newTable;

    INSERT INTO newTable 
        SELECT [name], [id], [date]
        FROM table1;

    ALTER TABLE newTable 
        ADD [Flag] [nvarchar](2) NULL;

    UPDATE newTable
    SET [Flag] = 1
    WHERE YEAR([date]) = 2020;

    ALTER TABLE newTable
        DROP COLUMN [date];
END;

根据 Guru 上面的评论,而是创建 table,因为它最初应该创建,然后根据您的 SP 相应地更新其中的数据。

我修改了你的 SP 来工作,但是,这仍然不是实际使用 SP 的正确方法。

见下面修改后的 SP:

SET ANSI_NULLS ON
GO

CREATE PROCEDURE myStoredProcedure 
AS
BEGIN
    SET NOCOUNT ON

    IF OBJECT_ID('newTable') IS NULL 
    BEGIN
        CREATE TABLE newTable 
        (
            [id]    int primary key identity,
            [name]  nvarchar(256) NOT NULL,
            [date]  datetime2 (7) NULL ,
            [Flag]  nvarchar(2) NULL
        )
    END;

    INSERT INTO newTable    (
                            [name],
                            [date]
                            )
        SELECT
            [name],
            [date]
        FROM table1;

    UPDATE newTable
    SET [Flag] = 1
    WHERE YEAR([date]) = 2020;

END;

我删除了删除日期列的代码,因为这是不明智的。