我可以使用單個存儲過程向表中添加新列並處理列後續字嗎?例如,我有以下存儲過程:在存儲過程中添加一列
...
alter table tb1
add col1 varchar(1) null
insert into tb1(col1)
values ('Y')
我得到了一個錯誤說
COL1是無效的。
我可以使用單個存儲過程向表中添加新列並處理列後續字嗎?例如,我有以下存儲過程:在存儲過程中添加一列
...
alter table tb1
add col1 varchar(1) null
insert into tb1(col1)
values ('Y')
我得到了一個錯誤說
COL1是無效的。
嘗試使用默認值'Y'創建表,而不是之後插入值。
alter table tb1 add col1 varchar(1) not null DEFAULT ('Y')
您需要在兩條線之間GO
已經在表中創建,按照該GO
文檔:
SQL Server實用解釋GO作爲一個信號,他們應該派現批將Transact-SQL語句添加到SQL Server的實例。
但是,在存儲過程中不能有GO
語句。
編輯
或者,你可以使用EXEC
語句來執行代碼:
EXEC ('alter table tb1 add col1 varchar(1) null')
EXEC ('update tb1 set col1 = ''Y''')
我只是舉一個例子,在現實中,我有很多其他的東西要做的存儲過程。我只是想知道是否必須在商店程序外改變表格? – GLP
@GaolaiPeng - 請參閱我的編輯 – LittleBobbyTables
一般來說,更改存儲過程之外的表是一個更好的選擇。每次teh proc運行時你真的想添加一列嗎?或者只添加一次?你應該將所有結構變化保存爲SQl腳本並放入源代碼控制,以便將它們移動到prod或在anotehr服務器上重新創建數據庫。 – HLGEM
難道你執行添加列後去命令? – Muthukumar
您不能在存儲過程中出現'GO'語句 – LittleBobbyTables
SQL Server在創建proc時檢查該列是否存在,因此您必須手動添加該列,創建proc,然後刪除該列以獲得此工作。我會建議@LittleBobbyTables添加的動態SQL解決方法,儘管可能使用'sp_executesql'來代替。 –