2015-11-06 68 views
0

我有做爲了塗改存儲過程改變表

  1. 與單個列創建表在表
  2. 添加更多的列表
  3. 插入數據下面的程序

第一次執行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

這是什麼意思。你期待存儲過程只執行一次嗎?那爲什麼要使用存儲過程? –

+0

請發佈您的代碼。您必須使用IF語句來防止重新創建表格 –

+0

糟糕的設計氣味 –

回答

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 
3

答案是「否」。如果你真的必須這樣做,那麼我建議使用動態SQL並執行它。

這絕對聽起來很糟糕的設計。