更改更改表的存储过程

时间:2015-11-06 07:29:15

标签: sql-server stored-procedures sql-server-2014

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

  1. 使用单列创建表
  2. 在表格中插入数据
  3. 向表中添加更多列
  4. 首次执行SP后,该表已存在。因此,如果我在SP中进行更改并尝试保存它,则会在插入步骤中抛出错误 "列名或提供的值数与表定义不匹配。"

    有没有办法禁用此功能'检查'并以某种方式更新SP而不必丢桌子?

    编辑:此SP应该每年只运行一次,以生成报告。直到明年才会看到它。实际上,有一组5-6个存储过程生成所有表(大约25个),然后用于生成报告。因此,当在SP中进行更改时,将删除表,并再次运行所有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:表在创建之前被删除。 但现在我的问题是:SSMS识别错误即。列数和提供的值数不匹配,但为什么不能看到表被删除?

2 个答案:

答案 0 :(得分:3)

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

这听起来很糟糕。

答案 1 :(得分:0)

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