使用 Excel 多值列从 Excel 导出到 SQL 服务器

Export from Excel to SQL Server with Excel Column of Multiple Values

虽然我有一些 SQL 技能,但我对数据库设计还很陌生。我有一个 excel sheet 我想上传到 SQL 服务器。问题是我在 Excel 中有一列有多个值,用“/”分隔。

例如:

Fruit Banana/Pear/Orange Pear/Raspberry/... Banana

...

我想根据“/”分割单元格,我做得很好。然后将值放入 SQL 服务器中的 table。但是,Excel 单元格中没有定义的 "Fruits" 数量,因此我需要允许多个 table 字段。

有人对如何执行此操作有建议吗?我编写了一个 ADODB 连接以从 Excel 导出到 SQL 服务器,但不知道如何处理此单元格。

谢谢

使用 Bridge Table。这样 Fruit table 中的每一行都可以有 N 种类型。

table 类型中的描述值将是香蕉、梨、橙子、覆盆子等

另一种选择是在加载数据后拆分数据。例如

Declare @YourTable table (ID int,Fruit varchar(150))
Insert into @YourTable values
(1,'Banana/Pear/Orange'),
(2,'Pear/Raspberry/Apple'),
(3,'Banana')


Select A.ID
      ,B.Key_Value
 From @YourTable A
 Cross Apply (Select * from [dbo].[udf-Str-Parse](A.Fruit,'/')) B

Returns

ID  Key_Value
1   Banana
1   Pear
1   Orange
2   Pear
2   Raspberry
2   Apple
3   Banana

UDF

CREATE FUNCTION [dbo].[udf-Str-Parse] (@String varchar(max),@Delimeter varchar(10))
--Usage: Select * from [dbo].[udf-Str-Parse]('Dog,Cat,House,Car',',')
--       Select * from [dbo].[udf-Str-Parse]('John Cappelletti was here',' ')

Returns @ReturnTable Table (Key_PS int IDENTITY(1,1), Key_Value varchar(max))
As
Begin
   Declare @XML xml;Set @XML = Cast('<x>' + Replace(@String,@Delimeter,'</x><x>')+'</x>' as XML)
   Insert Into @ReturnTable Select ltrim(rtrim(String.value('.', 'varchar(max)'))) FROM @XML.nodes('x') as T(String)
   Return 
End

当您设计 table 时,它必须具有定义的列数。

最简单的方法是为每个组分配一个 ID。

ID  Fruit
1   Banana
1   Pear
1   Orange
2   Pear
2   Raspberry
3   Banana