1 つの新しい列column2をtest_tblに追加し、その列をデフォルト値'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
しかし、nullableである列を1つ追加すると。
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 について
alter table、create table、または create view コマンドが if...else ブロック内で発生すると、Adaptive Server は、条件が true かどうかを判断する前に、テーブルまたはビューのスキーマを作成します。テーブルまたはビューが既に存在する場合、これによりエラーが発生する可能性があります。
null 許容列ステートメントがエラーなしで実行できる理由を知りたい!