Sql 在if语句中编写alter table查询
我有一个具有列状态的table Person。下面的代码存在于我试图执行的sqlt文件中Sql 在if语句中编写alter table查询,sql,sybase,database-schema,alter-table,Sql,Sybase,Database Schema,Alter Table,我有一个具有列状态的table Person。下面的代码存在于我试图执行的sqlt文件中 if not exists(select 1 from sysobjects, syscolumns where sysobjects.id = syscolumns.id and sysobjects.name = 'Person' and syscolumns.name = 'Status') begin print "Inside the if statement" end go
if not exists(select 1 from sysobjects, syscolumns where sysobjects.id = syscolumns.id and sysobjects.name = 'Person' and syscolumns.name = 'Status')
begin
print "Inside the if statement"
end
go
这很好,没有打印任何内容,因为表和列都存在。
如果我将文件更改为以下内容
if not exists(select 1 from sysobjects, syscolumns where sysobjects.id = syscolumns.id and sysobjects.name = 'Person' and syscolumns.name = 'Status')
begin
print "Inside the if statement"
alter table Person
add Status char(5) DEFAULT 'INVLD' NOT NULL
end
go
这不起作用,我收到以下错误消息:
Msg 2705,16级,状态3
服务器“NEXUS”,第6行
每个表中的列名必须是唯一的。表中的列名“Status”
多次指定“Person”
如果在这个代码中,它为什么会进入内部?解决这个问题的办法是什么?我知道你不是在寻找这个答案,但这里说:不要这样做
原因是,结构更改是总体升级的一部分。对于给定的项目,升级不止一次(就像所有时间一样),并且通常涉及多个表中的多个列。因此,您可以创建(或使用)一个工具,只修改您的结构,并与使用特定列的业务逻辑分开处理该问题。您为我指出的链接是sql。我和sybase一起工作。我已经到了可以让它工作的地步,但在特定的情况下它不起作用