Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.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 2008 - Fatal编程技术网

Sql 为什么附加数据库时“标识”列值不正确?

Sql 为什么附加数据库时“标识”列值不正确?,sql,sql-server-2008,Sql,Sql Server 2008,有人通过.mdf和.ldf文件向我发送了一个数据库,我将其附加到服务器上,没有错误、警告等。尽管我没有证据,因为我无法访问数据库来自的服务器,但主键标识值似乎与最初的不同。此外,它们似乎被重置-所有主键值都从1开始,而根据外键引用,很明显这是不正确的。例如,只有一行的表的主键值为1,而引用它的表的主键值为7 虽然我真的不在乎,但如果有解释的话,我很好奇为什么会发生这种情况 我真正需要的是弄清楚是否有办法连接数据库并保留正确的值 编辑: 据我所知,外键引用设置正确 以下是一些屏幕截图: 附加数据库

有人通过.mdf和.ldf文件向我发送了一个数据库,我将其附加到服务器上,没有错误、警告等。尽管我没有证据,因为我无法访问数据库来自的服务器,但主键标识值似乎与最初的不同。此外,它们似乎被重置-所有主键值都从1开始,而根据外键引用,很明显这是不正确的。例如,只有一行的表的主键值为1,而引用它的表的主键值为7

虽然我真的不在乎,但如果有解释的话,我很好奇为什么会发生这种情况

我真正需要的是弄清楚是否有办法连接数据库并保留正确的值

编辑: 据我所知,外键引用设置正确

以下是一些屏幕截图:
附加数据库不会更改表内容。您看到的值都来自创建数据库的应用程序

我所能想到的是,因为有FK,他们一开始的设计很糟糕,然后有人意识到他们需要FK,但他们不想删除的数据已经不好了,因此用NOCHECK创建了FK


所有孤立记录都是早期ID号吗?

我从未附加过标识值发生更改的文件。我怀疑数据库没有正确地设计数据完整性。结构中是否设置了实际的外键?根据您所描述的,我怀疑没有正确设置外键关系,据我所知。这就是为什么有不正确的参考数据的情况如此令人困惑。我在问题中添加了一些截图,请查看。虽然我在概念上完全同意您的观点,但该应用程序在另一台服务器上与该数据库完美配合。这让我相信,要么是我连接数据库时发生了奇怪的事情,要么是有人在发送给我之前故意破坏了数据库,要么是我有错误的数据库——所有这些都不太可能。如果你有足够的勇气冒险使用未记录的功能,那么你可以使用选择。。。from::fn_dblognull,null分析这些标识值是如何插入的日志历史记录,至少是数据库中存在的日志。这将很快显示它是发生在附加之前还是之后。请参见使用fn_dblog的示例,感谢您的想法。不幸的是,数据库是一个简单的恢复模型,没有提供太多的事务日志,只有43行。当我从::fn_dblognull中选择*from时,null似乎没有任何有用的行,但我会继续查找。我没有看到任何明显改变数据的行,这仍然让我怀疑:如果数据在连接数据库时没有改变,@%&如果引用数据值不正确,这些FK怎么可能存在?!这似乎是一种合理的可能性,但不太可能,因为:有一个表具有语言选项,其PK标识列名为LanguageID,只有一行;那一行的LanguageID是1。在所有引用它的表中,行的LanguageID都是7。事实上,问题中的屏幕截图没有选择“检查现有数据”选项。@Martin啊,对不起,我错过了。仍然没有真正解释数据库是如何从假定的工作状态转变为到处都有无效数据,而不怀疑存在恶意行为的,但俗话说,世界可能永远不会知道。