在存储过程中添加一列

时间:2012-09-10 19:44:52

标签: sql-server sql-server-2008 tsql stored-procedures alter-table

我是否可以使用一个存储过程向表中添加新列并处理后续列?例如,我有以下存储过程:

...

alter table tb1
add col1 varchar(1) null

insert into tb1(col1)
values ('Y')

我说错误

  

col1无效。

2 个答案:

答案 0 :(得分:11)

尝试使用默认值“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''')

答案 1 :(得分:0)

我是这样做的,所以您不必担心SQL注入:

ALTER PROCEDURE Add_DB_Field

(@FieldName varchar(100))

AS

ALTER TABLE Readings ADD tmpCol VARCHAR(100) NULL

EXEC sp_RENAME 'Readings.tmpCol' , @FieldName, 'COLUMN'