テーブルに新しいカラムを追加して後でカラムを処理するためのストアドプロシージャを1つだけ持つことはできますか?例えば、私は、ストアドプロシージャ、次のいる:ストアドプロシージャにカラムを追加する
...
alter table tb1
add col1 varchar(1) null
insert into tb1(col1)
values ('Y')
を私は
COL1が無効であるというエラーを得ました。
テーブルに新しいカラムを追加して後でカラムを処理するためのストアドプロシージャを1つだけ持つことはできますか?例えば、私は、ストアドプロシージャ、次のいる:ストアドプロシージャにカラムを追加する
...
alter table tb1
add col1 varchar(1) null
insert into tb1(col1)
values ('Y')
を私は
COL1が無効であるというエラーを得ました。
後で値を挿入するのではなく、デフォルト値 'Y'を使用してテーブルを作成してみてください。
alter table tb1 add col1 varchar(1) not null DEFAULT ('Y')
あなたはGO
ドキュメントごとに、表が作成されていために、2つのライン間でGO
が必要になります
SQL Serverのユーティリティは、彼らが現在のバッチを送信する必要があることを信号としてGOを解釈SQL ServerのインスタンスへのTransact-SQLステートメント
ただし、ストアードプロシージャにはGO
ステートメントを使用できません。
EDIT
代わりに、あなたはあなたのコードを実行するEXEC
ステートメントを使用することができます
EXEC ('alter table tb1 add col1 varchar(1) null')
EXEC ('update tb1 set col1 = ''Y''')
私は例を挙げていますが、実際にはストアドプロシージャでは他にも多くのことがあります。ストアプロシージャの外でテーブルを変更する必要があるかどうかは不思議です。 – GLP
@ GaolaiPeng - 私の編集を参照 – LittleBobbyTables
一般的に、ストアドプロシージャの外でテーブルを変更する方が良い選択です。あなたは本当にprocを実行するたびにカラムを追加したいのですか、それとも一度だけ追加したいのですか? PLUSは、SQlスクリプトとして保存されたすべての構造変更をソース管理に入れて、それらを動かすか、anotehrサーバ上でデータベースを再作成するのを簡単にします。 – HLGEM
あなたが列を追加した後、goコマンドを実行しますか。? – Muthukumar
ストアドプロシージャの途中でGOステートメントを使用することはできません – LittleBobbyTables
SQL Serverは、プロシージャを作成するときにカラムが存在するかどうかをチェックしているため、カラムを手動で追加してから、これを動作させるための列。 @LittleBobbyTablesが追加した動的SQLの回避策を提案しますが、おそらく代わりに 'sp_executesql'を使用します。 –