我目前正在开展一个项目,其中发生了一些(重大)数据损坏。具体来说,数据库在大多数表上都使用GUID作为主键,但它并没有强制执行这些表之间的数据完整性(由于这是一个冗长的“这是从另一家公司购买并与我们的东西集成”讨论)。正在努力引入参照完整性,但必须在可能的情况下清理数据。
此数据损坏的部分原因是已将不同的实体密钥切换或插入到不正确的列中。例如,由于软件在错误的列中插入了错误的密钥,因此“CustomerId”字段中存在有效的“ProductId”值。在问题最终被捕获之前(在数据聚合工作期间),数据库中发生了数月,现在清理工作量相当大。
我想知道的是,是否有在数据库中查找GUID的方法。相反,如果我有一个我认为是某个表中的主键的GUID,那么在T-SQL中有没有办法要求匹配任何已知的uniqueidentifier键列?
我知道我拥有的GUID不是CustomerId,但它可能是来自其他表的另一个主键ID。到目前为止,团队一直在手动搜索其他表以查找与流氓GUID的匹配,以查看他们是否可以找到密钥的“类型”。他们甚至已经创建了具有大量“select * from [table] where [tableId] = @rogueGUID”语句的脚本,这些语句搜索已知实体表以进行匹配。但是,这种方法效率不高。
我正在寻找这个脚本不仅适用于这个项目,还因为我认为“这个GUID是否作为这个数据库中任何地方的主键值存在?”查询类型将是开发工具箱中的有用资产。任何帮助表示赞赏。