我有一个Windows SQL Server数据库,在某些文章和类别之间存在多对多关系,该关系是由ArticleCategorie
表格与两列=>进行的。 [ArticleID] - [CategorieID]
。
现在的问题是我有一个csv文件看起来像这样(*图片)有两列文章ID和文章标签(让我们说文章ID是5;它有4个不同的类别,分别是id 1,4,6和7)所以这里是CSV的样子=>
|ArticleID----|Article Categories---|
|5------------|1,4,6,7--------------|
*图片:
我发现的最好方法是手动将所有数据(文章+类别)添加到表中,如下所示:
所以这超出了我想要的最终结果。不幸的是,我有超过七百篇文章,无法找到更快的方式导入它们,任何解决方案?如何快速导入数据?也许我可以选择更好的数据库设计?
答案 0 :(得分:0)
它不是一个优雅的解决方案,但它的工作原理。使用openrowset
将数据从csv文件导入临时表或导入数据。然后运行以下代码
declare @aid varchar(88)
declare @cid varchar(88)
declare @cur as cursor
SET @cur = CURSOR FOR(SELECT * FROM temp)
open @cur
FETCH NEXT FROM @cur INTO @aid,@cid
while @@FETCH_STATUS=0
BEGIN
insert into article select @aid,value from dbo.Split(',',@cid)
FETCH NEXT FROM @cur INTO @aid,@cid
END
CLOSE @cur
DEALLOCATE @cur
以下是split()
功能
CREATE FUNCTION [dbo].[Split] (@sep char(1), @s varchar(5120))
RETURNS table
AS
RETURN (
WITH pieces(pn, start, stop) AS (
SELECT 1, 1, CHARINDEX(@sep, @s)
UNION ALL
SELECT
pn + 1,
stop + 1, CHARINDEX(@sep, @s, stop + 1)
FROM pieces
WHERE stop > 0
)
SELECT pn,
SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 5120 END) AS Value
FROM pieces
)