SQL 服务器 - 从一个 table 插入到值不为空的另一个

SQL Server - Inserting from one table to another where values are NOT null

我有 TABLE A,我试图将它的值加入 TABLE B。Table B 不允许在列 Item 下为 nullable。 Table A 中有几项 item 的值为 NULL。我正在尝试插入此 table 并设置条件以不包含等于 NULL 的值。

这是 Table A:

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

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

如果 Item 不是 NULL

,我怎样才能改变我的查询以便插入 Table B

这是我的查询示例:

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

这与您认为的不同:

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 子句中列周围的括号以及不必要的别名。