我在本地计算机(SQLServer Express 和 VS Express)上开发了一个文档跟踪数据库和前端 C#/.NET 应用程序。一旦它开始工作并可用,我让我们的 IT 分支在主服务器上安装数据库 (SQL Server Express),并将应用程序指向它而不是我的本地版本。然后我使用 bcp 从我的盒子中导出并导入到服务器。我注意到现在亲子关系都破裂了。每个表都有一个名为 UID 的标识列,它在子表中被引用。但是 UID 并没有像在我的机器上那样复制,而是在插入时全部重新创建。我还没有找到任何有关处理此问题的正确方法的文档,但现在数据基本上无法使用。我可以很容易地重做 BCP,但是有人能指出我的错误吗?
这是我用于导出的内容(数据和格式以防万一):
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
对于导入(另外,在导入之前我已经复制了模式,所以表、键和存储过程都是提前重新创建的,但没有数据):
bcp DocControl.dbo.Documents in Documents.dat -n -S SERVER\SQLEXPRESS -T
这只是针对其中一张表,但其他表的完成方式完全相同。现在 Documents 表 UID 从 1 开始上升,而以前它从 380 开始上升。因此,子表中的引用 ID 不再指向正确的父表。
您缺少
-E
标识列的标志,它允许您保留值而不是在导入时重新播种它们。来自MSDN,