2011-12-16 24 views
0

環境:C#、NHibernate、SQLサーバー。1つのNHibernateトランザクションで同じテーブルに同じ名前の列を追加して列を追加するにはどうすればいいですか?

シナリオ:

私はテーブルの列を変更する必要があり、実行時にのみ、我々は変更する必要がある方法を知って来ます。そのため、列を変更する代わりに、既存の列を削除して、同じ名前の新しい列を追加するだけです。私たちはその列のデータも保持するつもりはありません。したがって、追加/削除メソッドは正常に動作するはずです。 1つの制約は、削除と追加の両方が単一のトランザクション内で行われるべきであるということです。

問題:

私は削除する必要が柱と再追加は、いくつかのデータを持っている場合、それは動作しません。それは私に、このエラーを与える:

ALTER TABLE only allows columns to be added that can contain nulls, or have a DEFAULT definition specified, or the column being added is an identity or timestamp column, or alternatively if none of the previous conditions are satisfied the table must be empty to allow addition of this column.

私は私が最初の列を削除していて、再追加す​​ることが問題になることはありませんと仮定したが、それはそれをやっていません。

単純化されたコード:

var dropColumn = string.Format("alter table {0} drop column {1} ",tableName, fieldName); 
Session.CreateSQLQuery(dropColumn).ExecuteUpdate(); 

var addColumn = string.Format("alter table {0} add {1} nvarchar(255) not null",tableName,fieldName); 
Session.CreateSQLQuery(addColumn).ExecuteUpdate(); 

は私が間違って何をしているのですか?

答えて

1

エラー:「nullが含まれているか、DEFAULTが含まれている可能性があります。」、2番目のクエリで「nullではありません。だから、どのような値(nullでない場合)を列の追加後にその列に入れたいですか?あなたはそれがデフォルト値の制約を使用する答えがある場合。

関連する問題