我有这种奇怪的行为Schema Compare
in Visual Studio 2017
。
在比较 2 个数据库时,我发现两个相同的表有所不同,其中一个没有
PK
名称。如果我使用脚本编写表,SSMS
我会看到其中一台服务器上的表脚本确实似乎没有PK
名称,但如果我查询sys.indexes
表,我会发现该索引在两台服务器上都有相同的名称。我发现的一种可能的解决方案是更新表,假设添加一些随机索引并将其删除,所以我猜测它与 SQL Server 如何存储对象定义有关。但是很高兴知道是什么导致了这种情况以及如何以正确的方式解决它,而不是使用某种解决方法。
ps 我知道这个
PK
名字不是“正确的”。比较两个相同的情况时的类似情况
SPs
。我试图跑sp_refreshsqlmodule
,sp_recompile
但它没有帮助。更新SP
有帮助,但这又不是很好的解决方法。
编辑 1:在第一个示例中,两个数据库上都存在同名的 PK(即使名称不符合标准)。在两个数据库上运行的以下查询返回相同的结果:
SELECT I.name
FROM sys.indexes AS I
INNER JOIN sys.objects AS O
ON O.object_id = I.object_id
INNER JOIN sys.schemas AS S
ON S.schema_id = O.schema_id
WHERE S.name = 'MySchema'
AND O.name = 'MyName'
结果:PK__TraceDat__AAAC09D801ED28A5