简短版本是我尝试使用存储过程从平面表映射到新的表集。
长版本:我想从现有表中记录SELECT
个记录,然后将每个记录INSERT
记录到一组新表中(大多数列将进入一个表,但有些会进入对其他人并与这个新表有关。)
我对存储过程和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
答案 0 :(得分:2)
我会说你有OldTable ID保留在新表中,直到你处理数据。
我假设您在Identity
Id
列MyNewCarTable
INSERT INTO MyNewCarTable (OldId, Year, Make, Model)
SELECT Id, Year, Make, Model FROM MyOldTable
然后,加入新表和上表以插入第二个表。我假设您的MyNewCustomerTable
也有Id
列,其中Identity
已启用。
INSERT INTO MyNewCustomerTable (CustomerName, CarId)
SELECT CustomerName, new.Id
FROM MyOldTable old
JOIN MyNewCarTable new ON old.Id = new.OldId
注意:我没有将客户名称拆分应用于名字和 姓氏,因为我不确定现有数据。
如果您不想OldId
MyNewCarTable
,DELETE
可以ALTER TABLE MyNewCarTable DROP COLUMN OldId
@ndb.transactional(xg=True)
def post():
try:
model1 = Model1()
model1.key1 = 'key1'
model1.key2 = 'key2'
model1.put()
...
#some logic3 block goes here
.
.
except Exception:
#all the database insertion transaction which happened should be rollback here.
raise ndb.Rollback
答案 1 :(得分:1)
您错过了规范化的一个步骤。您无需复制每辆车的客户信息。第4范式表格需要三个表格。这将减少存储空间,更重要的是允许在一个位置更新客户数据。
<强>客户强> 顾客ID 名字 名字
<强>汽车强> CarID 使 模型 年
<强> CustomerCar 强> CustomerCarID CarID 顾客ID DatePurchaed
通过这种方式,每辆车可以拥有多个车主,每个车主可以拥有多辆车,每辆车和/或客户只需要更新一条记录......第四范式。
答案 2 :(得分:-1)
如果我正确读取此内容,您希望从表1中获取每一行,并使用某些行数据创建表A中的新记录,然后将同一原始行中的数据创建到表B,表C但是再次参考表A?
如果是这种情况,您将使用Identity创建TableA并将其设为PK。
将所需的列数据插入该表并使用@IDENTITY检索最后一个标识值,然后将原始表中的剩余数据插入其他表,TableB,TableC等,并使用您的身份从TableA中检索为其他表中的FK。
通过示例:
表1列有col1,col2,col3,col4,col5 表A具有TabAID,col1,col2 表B具有TabBID,TabAID,col3 TableC具有TabCID,TabAID,col4
当读取第一行时,col1&amp;的值为col2插入TableA。 从插入的那一行捕获标识,然后将col3的值和标识输入到TableB中,然后将col4的值和标识输入到TableC中。
这是用于规范化数据的标准数据迁移技术。
希望这有助于,