我嘗試添加一個新列列2到test_tbl並設置默認值的列「N/A」和非空。該聲明如下:如果存在alter table語句有沒有空或默認值不起作用
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大約如果...否則
當ALTER TABLE,創建表,或創建視圖命令發生if ... else塊內 ,Adaptive Server創建作爲模式 表或視圖在確定條件是否爲真之前。如果表或視圖已存在,則此 可能會導致錯誤。
我想知道爲什麼可以運行nullable column語句而沒有錯誤!