在if语句中编写alter table query

时间:2011-01-31 23:51:22

标签: sql sybase database-schema alter-table

我有一个表有一个列Status的表。以下代码存在于我尝试执行的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"
    alter table Person
    add Status char(5) DEFAULT 'INVLD' NOT NULL
end

go

这不起作用,我收到以下错误消息:

Msg 2705,Level 16,State 3

服务器'NEXUS',第6行

每个表中的列名必须是唯一的。表中的列名称“状态” '人'被指定不止一次。

如果在此代码中,为什么会进去?解决方案是什么?

1 个答案:

答案 0 :(得分:3)

我知道你不是在寻找这个答案,但这里有:不要那样做。

原因是,结构更改是一般升级的一部分。对于给定的项目,升级不止一次(像所有时间一样),并且通常涉及多个表中的多个列。因此,您可以创建(或使用)仅修改结构的工具,并将该问题与使用特定列的业务逻辑分开处理。

相关问题