我有一个程序按顺序执行以下操作
首次执行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识别错误即。列数和提供的值数不匹配,但为什么不能看到表被删除?
答案 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