繁体   English   中英

将特定列从一个表复制到另一个

[英]Copy specific columns from one table to another

我有两个表 InventoryOriginal 和 InventoryBackup。 两者都有 20 列,但现在 InventoryOriginal 已更改,只有 12 列与 InventoryBackup 通用。 而且我需要将每个月的数据从 InventoryOriginal 复制到 InventoryBackup,但它会给我一个错误,因为列号不匹配。

我使用简单的语句来复制数据

INSERT INTO InventoryBackup
Select * from  InventoryOriginal where Period  = '2020-01-01'

但现在列数已更改 InventoryOriginal 为 12,InventoryBackup 为 20。我可以将 InventoryOriginal 中的 12 列复制到 InventoryBackup 并且 rest 列可以为空吗?

出现错误 - 列名或提供的值的数量与表定义不匹配。

您执行此操作的一般方法是提及您要使用的目标列和源列。 例如,对于 3 列,您将使用:

INSERT INTO InventoryBackup (col1, col2, col3)
SELECT col1, col2, col3
FROM InventoryOriginal
WHERE Period = '2020-01-01';

请记住,目标备份表中未提及的任何列都将分配一个NULL值,或者如果表定义支持,则可能分配一个默认值。

简单的答案是肯定的,但您可能需要调整 SQL 语句以指定列。 例如。

INSERT INTO InventoryBackup (col1, col2, col3, ...)
SELECT col1, col2, col3, ... FROM InventoryOriginal

这会很好,只要“备份”表中的额外列(不再在“原始”表中)允许 NULL。 如果没有,那么您需要在插入时指定一个空白值(或 0,如果它们是数字)。 例如。

INSERT INTO InventoryBackup (col1, col2, col3, extra1, extra2, ...)
SELECT col1, col2, col3, '', 0, ... FROM InventoryOriginal

希望这是有道理的。 您将需要的确切 SQL 语句实际上取决于“备份”表的实际结构

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM