Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как узнать в какой таблице хранятся даные  [new]
parikkk
Member

Откуда:
Сообщений: 3
Вопрос на собеседовании: есть база данных из 50 таблиц ,в одной таблице есть поле Т с типом данных int .Как узнать в какой таблице хранятся даные в этом поле если связи между таблицами не указаны?
23 янв 13, 08:37    [13813141]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать в какой таблице хранятся даные  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31868
parikkk
Вопрос на собеседовании: есть база данных из 50 таблиц ,в одной таблице есть поле Т с типом данных int .Как узнать в какой таблице хранятся даные в этом поле если связи между таблицами не указаны?
В смысле, поле Т ссылается на одну из остальных таблиц, но непонятно, на какую?

Никак нельзя, только если смотреть код или спросить проектировщика.
23 янв 13, 08:44    [13813159]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать в какой таблице хранятся даные  [new]
parikkk
Member

Откуда:
Сообщений: 3
Да поле Т ссылается на одну из остальных таблиц, но непонятно, на какую!
23 янв 13, 08:52    [13813180]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать в какой таблице хранятся даные  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
parikkk,

Никак. Только спросить у разработчика/проектировщика/документации. Если в нескольких таблицах есть поля одного типа и есть одинаковые данные это не означает то что между ними будет обязательно связь. Было бы поле типа uniqueidentifier можно было бы определить ссылки в силу уникальности глобальной newid того же - т.е. если guid создается этой функцией то он уникален не в пределах таблицы а глобально. Но с int такое не получится...
23 янв 13, 09:05    [13813223]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать в какой таблице хранятся даные  [new]
parikkk
Member

Откуда:
Сообщений: 3
Алексей Куренков,я им приблизительно также ответил но судя по их физиономиям ответ явно не понравился,может как-то с помощью репликации !???
23 янв 13, 09:18    [13813287]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать в какой таблице хранятся даные  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
parikkk,

Если о практике говорить, не теоретическая задача, а реально то что им нужно, то вероятнее всего у них уже работающая система и им нужно задокументировать схему данных. В этом случае профайлер/трасса в помощь, ну или из кэша вытащить запросы и по ним анализировать связи - например: select t.text, s.* from sys.dm_exec_query_stats s cross apply sys.dm_exec_sql_text(s.sql_handle) t
23 янв 13, 09:46    [13813418]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать в какой таблице хранятся даные  [new]
invm
Member

Откуда: Москва
Сообщений: 9724
parikkk
Вопрос на собеседовании: есть база данных из 50 таблиц ,в одной таблице есть поле Т с типом данных int .Как узнать в какой таблице хранятся даные в этом поле если связи между таблицами не указаны?
С помощью метаданных, определить в какой таблице(ах) есть столбец "Т". Упоминание про связи -- отвлекающий фактор.
23 янв 13, 10:26    [13813639]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать в какой таблице хранятся даные  [new]
maquisard
Member

Откуда:
Сообщений: 18
так не поидет?
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
23 янв 13, 10:29    [13813657]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать в какой таблице хранятся даные  [new]
Slava_Nik
Member

Откуда: из России
Сообщений: 901
версия сикуля какая?
можно и так думаю:
select * from INFORMATION_SCHEMA.COLUMNS
23 янв 13, 10:31    [13813675]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать в какой таблице хранятся даные  [new]
Винни-Бух
Member

Откуда: Из дома!
Сообщений: 346
Если в условии "...из 50 таблиц, в одной таблице есть поле Т с типом данных int" слова "в одной таблице" - это действительно условие задачи, то через sys.tables и sys.columns одним запросом мы вытаскиваем и поле, и таблицу. Если же в базе есть N таблиц, в которых есть поле "T" с типом "int", то максимум, что мы можем сделать - это вытащить ВСЕ такие таблицы. Как-то так...
23 янв 13, 10:54    [13813813]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать в какой таблице хранятся даные  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31868
parikkk
Алексей Куренков,я им приблизительно также ответил но судя по их физиономиям ответ явно не понравился,может как-то с помощью репликации !???
Ну, они могут и не разбираться.
Или вопрос не совсем так звучал, тут же важны ньюансы.
23 янв 13, 11:16    [13813951]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать в какой таблице хранятся даные  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31868
alexeyvg
parikkk
Алексей Куренков,я им приблизительно также ответил но судя по их физиономиям ответ явно не понравился,может как-то с помощью репликации !???
Ну, они могут и не разбираться.
Или вопрос не совсем так звучал, тут же важны ньюансы.
Или вы ответили "может как-то с помощью репликации", тогда понятно насчёт физиономый :-)
23 янв 13, 11:18    [13813965]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать в какой таблице хранятся даные  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Винни-Бух
через sys.tables и sys.columns одним запросом мы вытаскиваем и поле, и таблицу

Можно и только через sys.columns:
select object_schema_name(c.object_id) as [schema], object_name(c.object_id) as [table]
from sys.columns c
where c.name = N'status' and c.system_type_id = type_id(N'int') and objectproperty(c.object_id, 'IsTable') = 1
23 янв 13, 12:16    [13814394]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать в какой таблице хранятся даные  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
parikkk
Вопрос на собеседовании: есть база данных из 50 таблиц ,в одной таблице есть поле Т с типом данных int .Как узнать в какой таблице хранятся даные в этом поле если связи между таблицами не указаны?


Foreign key должен быть, иначе что через триггеры целостность поддерживается что-ли.
А если есть внешний ключ, тогда через связи объектов (в Management Studio на таблице правой кнопкой мышки -View Dependence)
23 янв 13, 12:18    [13814404]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать в какой таблице хранятся даные  [new]
Винни-Бух
Member

Откуда: Из дома!
Сообщений: 346
to Гость333:

Согласен.
Можно и только через sys.columns.
23 янв 13, 12:26    [13814470]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать в какой таблице хранятся даные  [new]
iiyama
Member

Откуда:
Сообщений: 642
INFORMATION_SCHEMA.COLUMNS
подробнее в БОЛ
23 янв 13, 12:55    [13814709]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить