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

Откуда:
Сообщений: 405
Подскажите пожалуйста, как можно найти определеный ид в таблицах БД? Просто много таблицв БД и надо найти все таблицы к которым привязан Ид! Спасибо!
21 май 12, 13:02    [12587875]     Ответить | Цитировать Сообщить модератору
 Re: Поиск id по всем таблицам БД  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
А что такое "ид" в вашем понимании?
21 май 12, 13:12    [12587957]     Ответить | Цитировать Сообщить модератору
 Re: Поиск id по всем таблицам БД  [new]
Glory
Member

Откуда:
Сообщений: 104751
Стротите цикл на основе системного представления INFORMATION_SCHEMA.COLUMNS
Из которого берете имена полей и таблиц и делаете динамический запрос
21 май 12, 13:13    [12587971]     Ответить | Цитировать Сообщить модератору
 Re: Поиск id по всем таблицам БД  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16839
Если "привязан", то нужны все связи по данному полю ? INFORMATION_SCHEMA.* F1
21 май 12, 13:14    [12587980]     Ответить | Цитировать Сообщить модератору
 Re: Поиск id по всем таблицам БД  [new]
temoxa
Member

Откуда:
Сообщений: 405
ид - это поле, которое идентифицирует таблицу, а также выступает внешним ключом в других таблицах, и мне надо их то и найти!
21 май 12, 13:18    [12588021]     Ответить | Цитировать Сообщить модератору
 Re: Поиск id по всем таблицам БД  [new]
Glory
Member

Откуда:
Сообщений: 104751
temoxa
ид - это поле, которое идентифицирует таблицу,

Поле не может идентицифировать таблицу
Запись наверное ?
21 май 12, 13:22    [12588052]     Ответить | Цитировать Сообщить модератору
 Re: Поиск id по всем таблицам БД  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
temoxa
ид - это поле, которое идентифицирует таблицу, а также выступает внешним ключом в других таблицах, и мне надо их то и найти!
Да вы партизан, батенька. Всю остальную постановку за ваc надо додумать?

Что подается на вход? Значение? Какого типа?
Что должно быть на выходе?
"Поле, которое идентифицирует таблицу, а также выступает внешним ключом в других таблицах" означает, что оно обязательно "идентифицирует таблицу" и "выступает внешним ключом в других таблицах", или, может, достаточно только первого условия?

В общем, потрудитесь поставить задачу как надо. Специально для вас написали: https://www.sql.ru/forum/actualthread.aspx?tid=127456
21 май 12, 13:22    [12588053]     Ответить | Цитировать Сообщить модератору
 Re: Поиск id по всем таблицам БД  [new]
temoxa
Member

Откуда:
Сообщений: 405
Извените! В общем так: надо найти значение типа int (например 123) во всех таблицах БД и вывести название этой таблицы!
21 май 12, 13:31    [12588116]     Ответить | Цитировать Сообщить модератору
 Re: Поиск id по всем таблицам БД  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16839
Перевожу:

Дана таблица, имя поля в таблице и значение.
Требуется найти все таблицы, связанные с исходной по данному полю.
Во всех найденных таблиц найти записи, в которых поле связи имеет то же значение, что и в текущей записи исходной таблицы.
21 май 12, 13:34    [12588133]     Ответить | Цитировать Сообщить модератору
 Re: Поиск id по всем таблицам БД  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18328
Вам уже ответили.
Glory
Стротите цикл на основе системного представления INFORMATION_SCHEMA.COLUMNS
Из которого берете имена полей и таблиц и делаете динамический запрос
21 май 12, 13:41    [12588193]     Ответить | Цитировать Сообщить модератору
 Re: Поиск id по всем таблицам БД  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Для примера читать FAQ: https://www.sql.ru/faq/faq_topic.aspx?fid=734
21 май 12, 13:44    [12588226]     Ответить | Цитировать Сообщить модератору
 Re: Поиск id по всем таблицам БД  [new]
temoxa
Member

Откуда:
Сообщений: 405
set nocount on
declare @name varchar(128), @substr int(10), @column varchar(128)
set @substr = 123456 -- фрагмент строки, который будем искать

create table #rslt 
(table_name varchar(128), field_name varchar(128), value ntext)

declare s cursor for select table_name as table_name from information_schema.tables where table_type = 'BASE TABLE' order by table_name
open s
fetch next from s into @name
while @@fetch_status = 0
begin
declare c cursor for 
      select quotename(column_name) as column_name from information_schema.columns 
        where data_type in ('text', 'ntext', 'varchar', 'char', 'nvarchar', 'char', 'sysname', 'int') and table_name  = @name
set @name = quotename(@name)
open c
fetch next from c into @column
while @@fetch_status = 0
begin
   print 'Processing table - ' + @name + ', column - ' + @column
   exec('insert into #rslt select ''' + @name + ''' as Table_name, ''' + @column + ''', ' + @column + 
      ' from' + @name + ' where ' + @column + ' = ''' + @substr + '''')
   fetch next from c into @column
end
close c
deallocate c
fetch next from s into @name
end
select table_name as [Table Name], field_name as [Field Name], count(*) as [Found Mathes] from #rslt
group by table_name, field_name
order by table_name, field_name
-- Если нужно, можем отобразить все найденные значения
--select * from #rslt order by table_name, field_name
drop table #rslt
close s
deallocate s


Попробывал переделать для поиска int, выдает ошибку! Что нада еще исправить для поиска? Спасибо!

Сообщение было отредактировано: 21 май 12, 17:59
21 май 12, 17:58    [12590635]     Ответить | Цитировать Сообщить модератору
 Re: Поиск id по всем таблицам БД  [new]
nezhadnye_my
Guest
temoxa,

declare @substr int(10), set @substr = 123456 -> declare @substr varchar(10), set @substr = '123456'

        where data_type in ('text', 'ntext', 'varchar', 'char', 'nvarchar', 'char', 'sysname', 'int') -> where data_type = 'int'

      ' from' + @name + ' where ' + @column + ' = ''' + @substr + '''') ->  ' from' + @name + ' where ' + @column + ' = ' + @substr )
21 май 12, 18:23    [12590728]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить