gpt4 book ai didi

sql-server - 将非规范化的关系数据从 Excel 导入 SQL Server

转载 作者:行者123 更新时间:2023-12-04 22:11:07 25 4
gpt4 key购买 nike

关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。












我们不允许提出有关书籍、工具、软件库等建议的问题。您可以编辑问题,以便可以用事实和引用来回答它。


4年前关闭。







Improve this question




我需要将 Excel 电子表格中的数据导入 SQL Server,但数据不是关系/规范化格式,因此导入向导不会删除它(据我所知)。

数据格式如下:

Category    SubCategory     Name        Description

Category#1 SubCategory#1 Product#1 Description#1
Category#1 SubCategory#1 Product#2 Description#2
Category#1 SubCategory#2 Product#3 Description#3
Category#1 SubCategory#2 Product#4 Description#4
Category#2 SubCategory#3 Product#5 Description#5

(抱歉,我缺乏在早上这个时候拿出“真实”数据的创造力......)

每行包含一个唯一的产品,但类别结构是重复的。我想将此数据导入三个表:
Category
SubCategory
Product

(我知道 SubCategory 确实应该包含在 Category 中,DB 不是我的设计)

我需要一种方法来根据类别导入唯一行,然后是子类别列,然后在将其他列导入产品时,根据名称获取对子类别的引用。

如果没有编写脚本,有没有办法使用导入向导或其他工具来做到这一点?

最佳答案

不久前我遇到了类似的问题,但没有找到任何简单的方法来使用导入向导来做到这一点。我解决导入的方法(因为这是一项一次性任务,而不是会一直闲逛的事情)是从 excel 创建一个简单的宏(VBA),它会简单地调用一个存储的过程,使用每一行作为参数。

存储过程会智能地插入每个参数(列),然后抓取 ID 用作下一个参数插入的外键。

例如:

声明 @CategoryID INT
声明 @SubCategoryID INT

-- 检查类别是否存在
如果不存在(SELECT * FROM tblCategories WHERE CategoryName = @pCategoryName)
开始

-- 你的insert语句在这里,然后获取ID

SET @CurrencyID = scope_identity()

结尾
别的
开始

-- 这里设置类别ID

结尾

VBA 宏的代码类似于:

私有(private)子 CommandButton1_Click()

将 cnt 调暗为 ADODB.Connection
将 wbBook 调暗为工作簿
将 wsSheet 调暗为工作表
将 intActiveRow 变暗
将 intInsuranceProduct 调暗为变体

' 获取我们的连接
设置 cnt = CreateConnection()

' 读取输入表
设置 wbBook = ActiveWorkbook
设置 wsSheet = wbBook.Worksheets(1)

' 忽略标题行
intActiveRow = 2

' 将每一行处理到数据库中
Do While (wsSheet.Cells(intActiveRow, 1) "")

' 执行存储过程,GenerateScript 会创建你的 SQL
cnt.Execute (GenerateScript(wsSheet, intActiveRow))

' 为行数增加 i
intActiveRow = intActiveRow + 1

环形

万一

'打扫干净。

cnt.关闭
设置 cnt = 无
设置 wbBook = 无
设置 wsSheet = 无

结束子

关于sql-server - 将非规范化的关系数据从 Excel 导入 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/759734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com