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
子句中列周围的括号以及不必要的别名。
我有 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
这是我的查询示例:
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
子句中列周围的括号以及不必要的别名。