2016-08-15 53 views
0

虽然我有一些SQL技能,但我对数据库设计还是比较新的。我有一个希望上传到SQL Server的Excel工作表。问题是我在Excel中有一列有多个值用“/”分隔。从Excel导出到带有Excel的SQL Server的多列值列

例如:

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

...

我想拆基于 “/”,这我做精细胞。然后将这些值放入SQL Server的表中。但是,没有定义的“水果”数量可以在Excel单元格中,因此我需要允许多个表格字段。

有没有人有如何做到这一点的建议?我写了一个ADODB连接来从Excel导出到SQL Server,但不知道如何处理这个单元格。

谢谢

回答

2

另一种选择是它已经被加载后,拆分您的数据。例如

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 

返回

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 
+0

知道了!我的工作在实现(因为我的实际数据库有点复杂,水果哈哈)。谢谢 – user3697498

+0

你可以在varchar上使用.value吗? – user3697498

+0

@ user3697498是的 –

0

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

enter image description here

表类型描述值将是香蕉,梨,橙,覆盆子等

0

当你设计的表就必须有一个定义的列数。

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

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