В настоящее время я работаю над проектом, в котором произошло некоторое (значительное) повреждение данных. В частности, база данных использует идентификаторы GUID в качестве первичных ключей в большинстве таблиц, однако она не обеспечивает целостность данных между этими таблицами (из-за многословного «обсуждения, которое было куплено у другой компании и интегрировано с нашими материалами»). В настоящее время предпринимаются усилия для введения ссылочной целостности, однако данные должны быть очищены, прежде чем это станет возможным.
Часть этого искажения данных заключается в том, что разные ключи сущностей были переключены или вставлены в неправильные столбцы. Например, допустимое значение «ProductId» существует в поле «CustomerId» из-за того, что программное обеспечение вставило неправильный ключ в неправильный столбец. Это происходило в течение нескольких месяцев в базе данных, прежде чем проблема была окончательно обнаружена (во время задания агрегации данных), и теперь усилия по очистке довольно велики.
Мне интересно, есть ли способ найти GUID в базе данных. Скорее, если у меня есть GUID, который я считаю первичным ключом в некоторой таблице, есть ли способ в T-SQL запрашивать совпадения для любого известного столбца ключа уникального идентификатора?
Я знаю, что GUID, который у меня есть, не CustomerId, но это может быть другой идентификатор первичного ключа из какой-то другой таблицы. До сих пор команда искала в других таблицах совпадения с мошенническими идентификаторами GUID, чтобы выяснить, могут ли они определить «тип» ключа. Они даже зашли так далеко, что создали сценарии с множеством операторов «select * from [table], где [tableId] = @rogueGUID», которые выполняют поиск в известных таблицах сущностей. Однако такой подход не очень эффективен.
Я ищу этот скрипт не только для этого проекта, но и потому, что я думаю: «Существует ли этот GUID как значение первичного ключа где-нибудь в этой базе данных?» Тип запроса будет полезным активом в наборе инструментов разработки. Любая помощь приветствуется.