2009-09-10 74 views
0

我目前正在进行发生一些(重大)数据损坏的项目。具体来说,数据库在大多数表上使用GUID作为主键,但是它并没有强化这些表之间的数据完整性(由于冗长的“这是从另一家公司购买并与我们的东西集成在一起讨论”)。目前正在努力引入参照完整性,但在可能之前必须清理数据。在数据库中查找GUID

此数据损坏的一部分是不同的实体键已被切换或插入到不正确的列中。例如,由于软件在错误的列中插入了错误的密钥,因此“CustomerId”字段中存在有效的“ProductId”值。在问题最终被捕获之前(在数据聚合工作期间),这在数据库中发生了数月,现在清理工作量相当大。

我想知道的是,如果有一种在数据库中查找GUID的方法。相反,如果我有一个GUID,我认为它是某个表中的主键,那么T-SQL中有没有一种方法可以向任何已知的uniqueidentifier键列寻求匹配?

我知道GUID我不是一个CustomerId,但它可能是来自其他表的另一个主键ID。到目前为止,团队一直在手动搜索其他表以匹配流氓GUID,以查看他们是否可以找出密钥的“类型”。他们甚至已经创建了大量的“select * from [table]”脚本,其中[tableId] = @rogueGUID“语句在搜索已知实体表中进行匹配。但是,这种方法效率不高。

我在寻找这个脚本,不仅是为了这个项目,而且是因为我想“这个GUID作为这个数据库中任何地方的主键值存在吗?”查询类型将成为开发工具箱中的有用资产。任何帮助表示赞赏。

+0

认真,我的哀悼... – 2009-09-10 22:24:53

+0

谢谢。这将是一条漫长的道路,但是当我们走到尽头时,对这支球队来说是非常有益的。 – 2009-09-10 22:49:18

+0

可能重复的[SQL Server:搜索特定GUID的所有表](http://stackoverflow.com/questions/970477/sql-server-search-all-tables-for-a-particular-guid) – Aaroninus 2015-01-29 14:57:52

回答

1

对此提出了类似的问题,并回答了here。希望这会有所帮助。

+1

Pete, 谢谢。我搜索了一个类似的问题,但没有找到它(尽管事实上你链接的那个似乎很容易找到)。我很欣赏快速回答。这有助于很多! – 2009-09-10 22:27:49

+0

不用客气斯图尔特。我很高兴能够提供帮助。 – 2009-09-11 07:27:12