0

tableB への外部キーを持つ tableA があります。

TableA (id, tableBId, attributeA)

行を挿入したいのですが、その時点では決定できないため、に設定しtableAますtableBIdNULL

ここに私のSQLクエリがあります:

insert into TableA values (tableId, attributeA)

tableId0 または -1 に設定しましたが、常にエラーが発生します。

INSERT ステートメントが FOREIGN KEY と競合しました

0 と -1 は のどの ID にも属していないため、このエラーは理解できますTableBtableBIdだから、私の質問は次のとおりです。この場合、どのように null を設定できますか?

4

4 に答える 4

4
  1. null を受け入れるように tableBId 列を設定する
  2. C# 側では、tableId 値に 0 または -1 の代わりに DbNull.Value を渡します。

編集

string sql = "INSERT INTO TableA (tableId, attributeA) values (@tableId, @attributeA)";
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.Add("@tableId", SqlDbType.Int);
cmd.Parameters["@tableId"].Value = tableId > 0 ? tableId : (object)DBNull.Value;
cmd.Parameters.Add("@attributeA", SqlDbType.VarChar);
cmd.Parameters["@attributeA"].Value = tableId;
cmd.ExecuteNonQuery();
于 2013-06-19T16:21:48.457 に答える
0

次のように、宛先テーブルの列に明示的に名前を付ける必要があります。

 insert into TableA (id, attributeA) values (tableId, attributeA)
于 2013-06-19T16:47:46.857 に答える
0

次の命令をデータベースに送信する必要があります。

ALTER TABLE TableA ALTER COLUMN tableBId bit null

これにより、null 値をtableBIdフィールドに格納できます。新しく作成されたレコードのデフォルト値は Null になります。

このスクリプトが外部キーに関連するエラーを返した場合は、このスクリプトを実行する前に外部キー制約を削除する必要があります。この場合、ちょうど

制約を削除します。

ALTER TABLE DROP CONSTRAINT myConstraintName

スクリプトを実行します (前を参照)

制約をリセットします。

ALTER TABLE ADD CONSTRAINT myConstraintName foreign key(tableBId) references tableB(id)
于 2013-06-19T16:57:46.230 に答える