0

我有一个 tableA 有 tableB 的外键:

TableA (id, tableBId, attributeA)

现在我想在其中插入一行tableA但将其设置为tableBIdNULL因为当时我无法确定它。

这是我的 sql 查询:

insert into TableA values (tableId, attributeA)

tableId我已设置为 0 或 -1,但总是收到错误消息:

INSERT 语句与 FOREIGN KEY 冲突

我理解这个错误,因为 0 和 -1 不属于TableB. tableBId所以,我的问题是:在这种情况下如何设置 null ?

4

4 回答 4

4
  1. 将 tableBId 列设置为接受空值
  2. 在 C# 端,为 tableId 值传递 DbNull.Value,而不是 0 或 -1

编辑

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 回答
1

您可以将设计器中的 tableId 列设置为 Allow Nulls。

于 2013-06-19T16:16:53.963 回答
0

您需要明确命名目标表中的列,如下所示:

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

您应该将以下指令发送到您的数据库:

ALTER TABLE TableA ALTER COLUMN tableBId bit 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 回答