简短版本是我试图从平面表映射到具有存储过程的新表集.
长版本:我想从现有表中SELECT记录,然后为每个记录插入一组新表(大多数列将进入一个表,但有些将转到其他表并与这个新表相关) .
我对存储过程和T-SQL有点新意.我无法在这个问题上找到任何特别明确的内容.
看起来我想要的东西是这样的
INSERT INTO [dbo].[MyNewTable] (col1, col2, col3)
SELECT
OldCol1, OldCol2, OldCol3
FROM
[dbo].[MyOldTable]
但我不确定如何保存相关记录,因为我将它分成多个表.我还需要在旧列适合新列之前操作旧列中的一些数据.
谢谢
示例数据
MyOldTable
Id | Year | Make | Model | Customer Name
572 | 2001 | Ford | Focus | Bobby Smith
782 | 2015 | Ford | Mustang | Bobby Smith
进入(无需担心重复客户或保留旧ID):
MyNewCarTable
Id | Year | Make | Model
1 | 2001 | Ford | Focus
2 | 2015 | Ford | Mustang
MyNewCustomerTable
Id | FirstName | LastName | CarId
1 | Bobby | Smith | 1
2 | Bobby | Smith | 2
最佳答案 我会说你有OldTable Id保存在新表中,直到你处理数据.
我假设您在MyNewCarTable上创建了一个Identity列标识
INSERT INTO MyNewCarTable (OldId, Year, Make, Model)
SELECT Id, Year, Make, Model FROM MyOldTable
然后,加入新表和上表以插入到第二个表中.我假设你的MyNewCustomerTable也有启用了Identity的Id列.
INSERT INTO MyNewCustomerTable (CustomerName, CarId)
SELECT CustomerName, new.Id
FROM MyOldTable old
JOIN MyNewCarTable new ON old.Id = new.OldId
Note: I have not applied Split of Customer Name to First Name and
Last Name as I was unsure about existing data.
如果您不想在MyNewCarTable中使用OldId,则可以删除它
ALTER TABLE MyNewCarTable DROP COLUMN OldId