更改更改 table 的存储过程

Altering stored procedure that ALTERs a table

我有一个程序按顺序执行以下操作

  1. 使用单列创建 table
  2. 在 table
  3. 中插入数据
  4. 向 table
  5. 添加更多列

SP 第一次执行后,table 已经存在。因此,如果我在 SP 中进行更改并尝试保存它,它会在插入步骤中抛出一个错误,说 "Column name or number of supplied values does not match table definition."

有什么方法可以禁用此 'check' 并以某种方式更新 SP 而不必删除 table?

编辑:这个 SP 应该 运行 每年只生成一次报告。直到明年才会有人关注它。实际上,有一组 5-6 个存储过程生成所有 tables(大约 25 个),然后用于制作报告。因此,当在 SP 中进行更改时,table 将被删除,所有 SP 将再次 运行。

示例:

CREATE proc sp_temp
AS

BEGIN
BEGIN TRY DROP TABLE TX END TRY BEGIN CATCH END CATCH
CREATE TABLE TX (ID INT)

DECLARE @I INT =0
WHILE (@I<=10)
BEGIN
    INSERT INTO TX VALUES (@I)
    SET @I += 1
END

ALTER TABLE TX ADD COL1 VARCHAR(10)

INSERT INTO TX VALUES  (11, 'SOME TEXT');

END

EDIT2:Table 在创建之前被删除。 但现在我的问题是:SSMS 识别错误即。提供的列数和值数不匹配,但为什么看不到 table 被删除?

答案是"no"。如果你真的必须这样做,那么我建议使用动态SQL,并执行它。

这听起来绝对是糟糕的设计。

ALTER proc [dbo].[sp_temp]
AS
BEGIN

    CREATE TABLE TX (ID INT)

    DECLARE @I INT =0

    WHILE (@I<=10)
    BEGIN

        INSERT INTO TX(ID) VALUES (@I)
        SET @I += 1

    END

    ALTER TABLE TX ADD COL1 VARCHAR(10)
    INSERT INTO TX VALUES  (11, 'SOME TEXT');

END