批量将数据从平面文件插入数据库表

时间:2013-06-30 05:54:18

标签: sql-server tsql

我有一个包含以下数据的平面文件:

productID,productName,cost
1234,Plasme TV,15000
1234,DVDPlayer,Mixer Grinder,7000

这个例子是基于商店提出的要求,即购买等离子电视的人,获得价值7000免费的DVDPlayer和Mixer Grinder。所以商店希望将这个平面文件转储到一个表中,productID是相同的,表应该是这样的:

productID    productName              cost
1234         Plasma TV                15000
1234         DVDPlayer,Mixer Grinder  7000

也就是说,在产品列的第一行中,等离子电视应该来到第二行,在productName列中,DVDPlayer和Mixer Grinder都应该结合在一起。

任何人都可以帮我吗??

我需要使用T-SQL编写一个存储过程。

由于

2 个答案:

答案 0 :(得分:2)

在以逗号分隔的文件中的字段中使用逗号是不太好的。可能有一些方法可以使用花哨的格式文件来解决这个问题。我的建议是将数据加载到具有单个字符列且没有分隔符的临时表中。

然后,您可以将最终表加载为:

insert into t(productID, productName, cost)
    select cast(left(st.line, 4) as int) as ProductId,
           substring(st.line, 6, len(st.line) - 5 - charindex(',', reverse(st.line))) as ProductName,
           cast(right(st.line, charindex(',', reverse(st.line))-1) as float) as cost
    from stagingTable st;

这是使用字符串操作从每一行中提取不同的字段。

答案 1 :(得分:0)

您的数据库设计超出了最佳状态。我在这里真正推荐的是你考虑更新存储表。

“1234,DVDPlayer,Mixer Grinder,7000” - 这如何具体告诉你哪个DVDPlayer和哪个Grinder具体?如果商店有多个DVD播放器型号库存怎么办?

如果您无法更新表格,那么至少考虑存储产品ID而不是产品名称。