在SQL Server中,我有一个表,每天都会在其上加载新的事务数据。我正在尝试基于现有表创建一个新表,但是在新表中我需要重命名一个列并添加一个新的连接列。
例如:
ExistingTable
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列的组合
newtable的
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,但是当我插入新数据时,我不确定它是否会正确映射到新列名。非常感谢任何帮助。
答案 0 :(得分:2)
我首先创建表,然后使用SQL Server具有的import \ export实用程序。当您右键单击数据库时,它处于任务之下。然后,在选择源和目标之后,您可以选择编写自己的SQL。
INSERT INTO <destination table>
(Columns)
SELECT <Columns to copy plus custom column>
FROM <source table>
然后确保映射完全正确并且具有正确的长度要求。毕竟选择完成后,它应该将所有数据加载到表中。
如果你愿意,虽然你可以让你的工作为你创建表,但它将是另一个表的精确副本,只是名称会有所不同。您需要更改所有列名称并在复制后创建自定义列。
答案 1 :(得分:0)
您可以使用以下内容进行测试:
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;
答案 2 :(得分:0)
假设您已经创建了一个名为 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