首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BCP没有保留关系数据。

BCP没有保留关系数据。
EN

Database Administration用户
提问于 2015-01-12 19:23:32
回答 1查看 141关注 0票数 1

我在本地机器(SQLServer Express和VS Express)上开发了文档跟踪数据库和前端C#/.NET应用程序。一旦它正常使用,我就让我们的it分支在主服务器上安装数据库(),并将应用程序指向它,而不是我的本地版本。然后,我使用bcp从我的盒导出并导入到服务器。我注意到父母和孩子的关系现在都破裂了。每个表都有一个名为UID的标识列,该列在子表中引用。但是did没有复制,因为它们在我的机器上,而是在插入时重新创建的。我还没有找到任何关于处理这个问题的正确方法的文档,但是现在这些数据基本上是不可用的。我可以很容易地重新做BCP,但谁能指出我的错误?

下面是我用于导出的内容(数据和格式都是以防万一):

代码语言:javascript
复制
bcp DocControl.dbo.Documents out Documents.dat -n -S MYMACHINE\SQLEXPRESS -T
bcp DocControl.dbo.Documents format nul -T -n -f Documents.fmt -S MYMACHINE\SQLEXPRESS

对于导入(而且,在导入之前,我重复了模式,因此表、键和存储过程都是提前重新创建的,但没有数据):

代码语言:javascript
复制
bcp DocControl.dbo.Documents in Documents.dat -n -S SERVER\SQLEXPRESS -T

这仅适用于其中一个表,但其他表的处理方式完全相同。现在文档表UID从1开始并上升,而以前它大约从380开始,然后从那里开始上升。因此,子表中的引用ID不再指向正确的父级。

EN

回答 1

Database Administration用户

回答已采纳

发布于 2015-01-12 19:29:16

您缺少标识列的-E标志,它允许您保留值,而不是在导入时重新播种它们。

代码语言:javascript
复制
bcp DocControl.dbo.Documents in Documents.dat -n -E -S SERVER\SQLEXPRESS -T

来自MSDN

-E指定要将导入的数据文件中的标识值用于标识列。如果未给出-E,则忽略导入的数据文件中该列的标识值,Server将根据表创建期间指定的种子值和增量值自动分配唯一值。如果数据文件不包含表或视图中标识列的值,请使用格式文件指定在导入数据时应跳过表或视图中的标识列;Server将自动为该列分配唯一值。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/89101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档