簡體   English   中英

復制表但有新列

[英]Copy Table but with new Columns

在SQL Server中,我有一個表格,每天在該表格上加載新的交易數據。 我試圖基於現有表創建一個新表,但是在新表中,我需要重命名列並添加新的串聯列。

例如:

現有表

    ID        Quantity    Name        Price    ReceiptNumber    Date
    1243      3           Stickers    5        4444             2016-12-01 
    4923      1           Glue        3        8288             2016-12-02
    1243      2           Stickers    5        1122             2016-12-04

在這里,我想將ID列重命名為ItemID,然后創建一個附加列,該列是ID和ReceiptNumber列的組合

新表

    ItemID    Quantity    Name        Price    ReceiptNumber    Date          TransactionID
    1243      3           Stickers    5        4444             2016-12-01    1243-4444
    4923      1           Glue        3        8288             2016-12-02    4923-8288
    1243      2           Stickers    5        1122             2016-12-04    1243-1122

注意,TransactionID是ItemID和ReceiptNumber的組合。 本質上,我正在嘗試進行設置,以便可以將數據加載到此新表中,然后將TRUNCATE EXISTINGTABLE,以便第二天可以將新數據加載到該表中。 我可以從頭開始創建NewTable,但是不確定在插入新數據時它是否可以正確映射到新列名。 任何幫助將不勝感激。

我將首先創建表,然后再使用SQL Server的import \\ export實用程序。 右鍵單擊數據庫時,它位於任務下。 然后,在選擇源和目標之后,您可以選擇編寫自己的SQL。

INSERT INTO <destination table>
(Columns)
SELECT <Columns to copy plus custom column> 
FROM <source table>

然后,確保映射全部正確並且具有正確的長度要求。 完成所有選擇后,它將所有數據加載到表中。

如果您願意,雖然可以讓工作為您創建表,但這將是另一個表的精確副本,只是名稱會有所不同。 您將需要更改所有列名稱,並在復制后創建自定義列。

您可以使用類似以下內容進行測試:

if exists (select * from tempdb.sys.objects where name like '#newtable%') begin; drop table #newtable; end;
if not exists (select * from tempdb.sys.objects where name like '#newtable%')
begin
create table #newtable (ItemID int,Quantity int, Name varchar(64), Price money, ReceiptNumber int, [Date] date, TransactionID varchar(32) ) 
end;

insert into #newtable (ItemId, Quantity, Name, Price, ReceiptNumber,[Date],TransactionID)
select ID, Quantity, Name, Price, ReceiptNumber, [Date], TransactionID = convert(varchar(14),ItemId)+'-'+(convert(varchar(14),ReceiptNumber))
from ExistingTable;

假設您已經創建了一個名為NewTable的表,則可以使用以下命令復制數據:

SET IDENTITY_INSERT NewTable ON

INSERT INTO NewTable (ItemID, Quantity, Name, Price, ReceiptNumber, Date, TransactionID)
       SELECT ID, Quantity, Name, Price, ReceiptNumber, Date, CONVERT(VARCHAR(14), ItemId) + '-' + (CONVERT(VARCHAR(14), ReceiptNumber) 
       FROM ExistingTable;

SET IDENTITY_INSERT NewTable OFF

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM