Как узнать в какой таблице хранятся даные
parikkk
Дата: 23.01.2013 08:37:45
Вопрос на собеседовании: есть база данных из 50 таблиц ,в одной таблице есть поле Т с типом данных int .Как узнать в какой таблице хранятся даные в этом поле если связи между таблицами не указаны?
alexeyvg
Дата: 23.01.2013 08:44:53
parikkk |
---|
Вопрос на собеседовании: есть база данных из 50 таблиц ,в одной таблице есть поле Т с типом данных int .Как узнать в какой таблице хранятся даные в этом поле если связи между таблицами не указаны? |
В смысле, поле Т ссылается на одну из остальных таблиц, но непонятно, на какую?
Никак нельзя, только если смотреть код или спросить проектировщика.
parikkk
Дата: 23.01.2013 08:52:07
Да поле Т ссылается на одну из остальных таблиц, но непонятно, на какую!
Алексей Куренков
Дата: 23.01.2013 09:05:10
parikkk,
Никак. Только спросить у разработчика/проектировщика/документации. Если в нескольких таблицах есть поля одного типа и есть одинаковые данные это не означает то что между ними будет обязательно связь. Было бы поле типа uniqueidentifier можно было бы определить ссылки в силу уникальности глобальной newid того же - т.е. если guid создается этой функцией то он уникален не в пределах таблицы а глобально. Но с int такое не получится...
parikkk
Дата: 23.01.2013 09:18:07
Алексей Куренков,я им приблизительно также ответил но судя по их физиономиям ответ явно не понравился,может как-то с помощью репликации !???
Алексей Куренков
Дата: 23.01.2013 09:46:27
parikkk,
Если о практике говорить, не теоретическая задача, а реально то что им нужно, то вероятнее всего у них уже работающая система и им нужно задокументировать схему данных. В этом случае профайлер/трасса в помощь, ну или из кэша вытащить запросы и по ним анализировать связи - например: select t.text, s.* from sys.dm_exec_query_stats s cross apply sys.dm_exec_sql_text(s.sql_handle) t
invm
Дата: 23.01.2013 10:26:43
parikkk |
---|
Вопрос на собеседовании: есть база данных из 50 таблиц ,в одной таблице есть поле Т с типом данных int .Как узнать в какой таблице хранятся даные в этом поле если связи между таблицами не указаны? |
С помощью метаданных, определить в какой таблице(ах) есть столбец "Т". Упоминание про связи -- отвлекающий фактор.
maquisard
Дата: 23.01.2013 10:29:38
так не поидет?
SELECT so.name FROM sys.columns sc
INNER JOIN sysobjects so ON sc.object_id = so.id
WHERE sc.name = 'T'
AND sc.user_type_id = 56
Slava_Nik
Дата: 23.01.2013 10:31:43
версия сикуля какая?
можно и так думаю:
select * from INFORMATION_SCHEMA.COLUMNS
Винни-Бух
Дата: 23.01.2013 10:54:54
Если в условии "...из 50 таблиц, в одной таблице есть поле Т с типом данных int" слова "в одной таблице" - это действительно условие задачи, то через sys.tables и sys.columns одним запросом мы вытаскиваем и поле, и таблицу. Если же в базе есть N таблиц, в которых есть поле "T" с типом "int", то максимум, что мы можем сделать - это вытащить ВСЕ такие таблицы. Как-то так...