簡體   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