SQL Server:插入失败时将空值转换为值 - 我可以强制执行此操作吗?

发布于 2024-10-01 22:17:38 字数 494 浏览 4 评论 0原文

我正在尝试将 NOT NULL 和 DEFAULT 添加到现有表中。

为此,我使用过渡表来填充任何 NULL 值。

Table1 具有 NULL 列,Table2 具有改进的设计。

CREATE TABLE table1 (
    CustomerID INT
  , CartID NULL);

CREATE TABLE table2 (
    CustomerID INT
  , CartID NOT NULL DEFAULT NEWID());

INSERT INTO table2 (CustomerID, CartID)
SELECT CustomerID, CartID = CASE CartID WHEN NULL THEN NEWID() ELSE CartID END
FROM table1;

即使我在 SELECT 语句中用新值填充每个 NULL 值,我仍然收到“无法将 NULL 值插入列”错误。

我怎样才能做到这一点?

I am trying to add NOT NULL and a DEFAULT to an existing table.

To do this, I am using a transitional table to populate any NULL values.

Table1 has the NULL column, Table2 has the improved design.

CREATE TABLE table1 (
    CustomerID INT
  , CartID NULL);

CREATE TABLE table2 (
    CustomerID INT
  , CartID NOT NULL DEFAULT NEWID());

INSERT INTO table2 (CustomerID, CartID)
SELECT CustomerID, CartID = CASE CartID WHEN NULL THEN NEWID() ELSE CartID END
FROM table1;

I still get the "Cannot insert the value NULL into column" error, even though I am populating every NULL value with a new value in the SELECT statement.

How can I make this work?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

泪冰清 2024-10-08 22:17:38

SQL中,NULL不等于NULL(也不等于)。

“狗有没有佛性?”
NULL

这就是为什么 CASE var WHEN NULL THEN ... 永远不会成功。

使用这个:

CASE WHEN CartID IS NULL THEN NEWID() ELSE CartID END

或者只是这个:

COALESCE(CartID, NEWID())

In SQL, NULL is not equal to NULL (and not unequal too).

"Does a dog have Buddha-nature or not?"
"NULL"

This is why CASE var WHEN NULL THEN … will never succeed.

Use this:

CASE WHEN CartID IS NULL THEN NEWID() ELSE CartID END

or just this:

COALESCE(CartID, NEWID())
倥絔 2024-10-08 22:17:38

我投票支持 Qassnoi 的答案,但我通常不会复制到新表,而是:

  1. 更改表以允许 null,
  2. 用新的 id 更新表(其中 null),
  3. 再次更改表,不设置 null 限制和默认值。

只有当没有其他人使用该表时,这才有效,因此夸斯诺伊的答案更可取。

I vote for Qassnoi's answer, but instead of copying to a new table, I would usually:

  1. Alter table to allow null,
  2. Update table with new ids where null,
  3. Alter table again with not null restriction and default.

This would only work if noone else was using the table, so Quassnoi's answer is preferable.

╰つ倒转 2024-10-08 22:17:38

您可以将代码更改为以下内容:

INSERT INTO table2 (CustomerID, CartID)
SELECT CustomerID, COALESCE(CartID, NEWID())
FROM table1;

You can change the code to the following:

INSERT INTO table2 (CustomerID, CartID)
SELECT CustomerID, COALESCE(CartID, NEWID())
FROM table1;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文