8

我可以有一个存储过程来向表中添加新列并处理列后记吗?例如,我有以下存储过程:

...

alter table tb1
add col1 varchar(1) null

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

我有一个错误说

col1 无效。

4

2 回答 2

14

尝试使用默认值“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''')
于 2012-09-10T19:47:56.223 回答
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'
于 2018-12-20T12:58:57.313 回答