Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将表复制到两个新表中_Sql_Sql Server_Database - Fatal编程技术网

Sql 将表复制到两个新表中

Sql 将表复制到两个新表中,sql,sql-server,database,Sql,Sql Server,Database,我有一个丑陋的SQL Server 2014表,其中包含书籍。每本书都可以由多个作者撰写,因此一本书可以在表格中重复多次,每个作者一行。ISBN字段唯一标识图书 数据如下所示: TABLE NAME = "OldUglyTable" ID ISBN BookTitle AuthorName 1 1 My Awesome Book John Smith 2 1 My Awesome Book

我有一个丑陋的SQL Server 2014表,其中包含书籍。每本书都可以由多个作者撰写,因此一本书可以在表格中重复多次,每个作者一行。ISBN字段唯一标识图书

数据如下所示:

TABLE NAME = "OldUglyTable"
ID     ISBN       BookTitle            AuthorName
1      1          My Awesome Book      John Smith
2      1          My Awesome Book      Sally Johnson
3      2          All About Cats       Frank Jones
4      1          My Awesome Book      A. Smithfield
我们现在所做的是创建了两个新的空表
Books
(自动递增
BookID
ISBN
(唯一键)和
BookTitle
)和
BookAuthors
(自动递增
ID
BookID
(FK to
Books
),
AuthorName
)。原始的
ID
字段是垃圾,我们并不真正关心它

我无法更改表结构,但我正试图通过在
Books
表中为每个唯一的
ISBN
创建一条记录,将记录快速移动到这两个表中,然后在
BookAuthors
表中为每个作者创建一条记录,该记录在
Books
中的
BookID
字段上有一个FK输出到刚刚在
Books
中创建的新记录

如何有效地将这些数据拆分为这两个新表,并将FK插入到
BookAuthors

我有超过6000万行!我尝试在ISBN上进行行号分区,只从CTE中获取第一行,因为
DISTINCT
不一定总是返回正确的数据,但这甚至给了我

'System.OutOfMemoryException System.OutOfMemoryException'


SSMS中的错误:(我不确定最好的方法是什么。

首先,
使用此查询将不同的图书插入
图书
表:

INSERT INTO Books(ISBN, BookTitle)
SELECT DISTINCT
    ISBN, BookTitle
FROM OldUglyTable
然后,使用
内部联接将
作者插入
书籍作者

INSERT INTO BookAuthors(BookID, AuthorName)
SELECT
    b.BookID, t.AuthorName
FROM OldUglyTable t
INNER JOIN Books b
    ON b.ISBN = t.ISBN
为了帮助提高性能,我建议您在
Books
表中插入后创建以下两个索引:

CREATE NONCLUSTERED INDEX IXN_Books_ISBN ON Books(ISBN)
CREATE NONCLUSTERED INDEX IXN_OldUglyTable_ISBN ON OldUglyTable(ISBN) INCLUDE(AuthorName)

PS:我想我可以根据本文将我的测试结果和查询吐出到文本文件中,以避免System.OutOfMemoryException错误。我真正的问题只是获得正确的查询来移动数据并创建FK关系。你能发布你的查询吗?