1

我目前正在将数据从一个数据库传输到另一个数据库。

我的问题出现在一张新设计的桌子上。旧表由以下列组成:

car1, car2, car3, id1, id2, id3, id4, idtxt, idtxt2  
(id types could be the same for multiple rows)  

这些行将具有特定的组合car1, 2, 3,每个组合具有特定的 id。id1总是填充,而 2,3,4,txt 和 txt2 可能会或可能不会被填充。

我的新专栏包括:

car1, car2, car3, idtype, id#,text

在这个新表中idtype是 = 到 id1、id2、id3、id4、id5(idtxt) 和 id6(idtxt2) 而 id# 是 = 到表一中 id 的行值。这意味着会有比旧表中更多的行,因为每个 id# 都会有一行,即使它们是相同的组合。

您将如何通过存储过程传输此信息?

我目前只能考虑运行多个由 insert into 语句组成的存储过程,但除了传输数据之外,我似乎无法找到关于如何插入某个值的任何答案。即(idtype = id1 用于所有此传输)

我也相信这不是最有效的方法。

请告诉我是否需要澄清。谢谢!

编辑,我已经弄清楚如何在数据传输期间插入特定值。其他问题/建议仍然存在。

4

1 回答 1

1

如果我正确理解您在做什么,您可以通过一个简单的查询来完成。

听起来您正在尝试规范化数据,方法是获取在第一个表中旋转的字段并在第二个表中取消旋转它们。

select car1, car2, car3, 'id1' as idtype, id1
from t union all
select car1, car2, car3, 'id2', id2
from t union all
select car1, car2, car3, 'id3', id3
from t union all
select car1, car2, car3, 'id4', id4
from t union all
select car1, car2, car3, 'id5', idtxt
from t union all
select car1, car2, car3, 'id2', idtxt2
from t

您可以通过创建目标表并插入,或使用“create table as”或“select into”(取决于您使用的数据库)将其保存到另一个表中。

例如,如果您正在创建表,您的代码将类似于:

create table <new table in new database> (
    <tablename>id int primary key identity(1,1),
    car1 <some type>,
    ...,
    CreatedBy varchar(256) default system_user,
    CreatedAt datetime default getdate(),
); 

insert into <new table in new database>(car1, car2, car3, idtype, id1)
    <select query above>

注意:我为此使用了 SQL Server 语法,并添加了三个附加列:id、CreatedBy 和 CreatedAt。(几乎)所有表都应该有这些列。

于 2012-07-09T17:49:23.083 回答