0

我有表 A,我试图将它的值加入表 B。表 B 不允许在 column 下为空值Item。其中有一些项目Table A具有 NULL 值item。我正在尝试插入此表并设置条件不包括等于 NULL 的值。

这是表A的一个:

+---+-----------------+
|ID | SizeID |Item    |
+---------------------+
|   |        |        +
| 1 |  22    | Clothing
+---------------------+
| 2 |   2    | Shoes  |
+---------------------+
| 3 |   11   |  NULL  |
+---------------------+
| 4 |   9    |  NULL  |
+---------------------+
| 5 |   10   |  Hats  |
+---+--------+--------+

表 B 具有相同的列命名约定。由于某些空值和表 B 不允许 Nullables,在运行插入查询时出现错误。所以我试图通过使用来解决这个问题,Where Item <> NULL但是在运行这个查询时我有 0 行受到影响。

Item如果不为空,我如何更改我的查询以插入表 B

这是我的查询示例:

INSERT INTO dbo.TableB ([SizeID], [Item])
SELECT(SizeID as SizeID, Item as Item)
FROM dbo.TableA
WHERE Item <> NULL
4

1 回答 1

2

这不会像您认为的那样做:

WHERE Item <> NULL

在 SQL 中,没有什么是等于null- 其他比较运算符(不等于、大于、小于、介于等)也是如此。

您可以将其null视为未定义未知。通常null <> null会产生一个null结果(在where子句中,其行为与 相同false)。

要检查一个值null,你需要特殊的构造is [not] null

所以:

INSERT INTO dbo.TableB (SizeID, Item)
SELECT SizeID, Item
FROM dbo.TableA
WHERE Item IS NOT NULL

请注意,我删除了SELECT子句中列周围的括号以及别名,这些都是不必要的。

于 2020-07-17T22:45:25.617 回答