SQL Server:插入失败时将空值转换为值 - 我可以强制执行此操作吗?
我正在尝试将 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
在
SQL
中,NULL
不等于NULL
(也不等于)。这就是为什么
CASE var WHEN NULL THEN ...
永远不会成功。使用这个:
或者只是这个:
In
SQL
,NULL
is not equal toNULL
(and not unequal too).This is why
CASE var WHEN NULL THEN …
will never succeed.Use this:
or just this:
我投票支持 Qassnoi 的答案,但我通常不会复制到新表,而是:
只有当没有其他人使用该表时,这才有效,因此夸斯诺伊的答案更可取。
I vote for Qassnoi's answer, but instead of copying to a new table, I would usually:
This would only work if noone else was using the table, so Quassnoi's answer is preferable.
您可以将代码更改为以下内容:
You can change the code to the following: