我尝试在 test_tbl 中添加一个新列column2并将该列设置为默认值'N/A'而不是 null。声明如下:
if not exists (select 1 from syscolumns where object_name(id) = 'test_tbl' and name = 'column2')
begin
alter table test_tbl add column2 varchar(20) default 'N/A' not null
end
错误是
Could not execute statement.
Column names in each table must be unique. Column name 'column2' in table 'test_tbl' is specified more than once.
Sybase error code=2705
Severity Level=16, State=3, Transaction State=1
Line 4
但是,如果我添加一个可以为空的列。
if not exists (select 1 from syscolumns where object_name(id) = 'test_tbl' and name = 'column2')
begin
alter table test_tbl add column2 varchar(20) null
end
它可以工作。我对这些很困惑。我搜索了一些标签,知道动态 sql 可以工作。
该错误是在规范化期间引发的(因为解析树正在转换为规范化查询树),而不是在执行时。动态sql的内容在实际调用之前不会被处理,避免了错误。
在 Sybase DOC 中关于 if...else
在 if...else 块中出现 alter table、create table 或 create view 命令时, Adaptive Server 在确定条件是否为真之前为表或视图创建模式。如果表或视图已经存在,这可能会导致错误。
我想知道为什么可以为空的列语句可以无错误地执行!