我有一个表有一个列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行
每个表中的列名必须是唯一的。表中的列名称“状态” '人'被指定不止一次。
如果在此代码中,为什么会进去?解决方案是什么?
答案 0 :(得分:3)
我知道你不是在寻找这个答案,但这里有:不要那样做。
原因是,结构更改是一般升级的一部分。对于给定的项目,升级不止一次(像所有时间一样),并且通常涉及多个表中的多个列。因此,您可以创建(或使用)仅修改结构的工具,并将该问题与使用特定列的业务逻辑分开处理。