powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Поиск значения по всем таблицам БД
9 сообщений из 9, страница 1 из 1
Поиск значения по всем таблицам БД
    #37796886
temoxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго всем дня! Есть задачка поиска значения по всем таблицам в БД? Есть ли какое-нибудь универсальное решение! В базе очень много таблиц, не хочется все переберать! Заранее спасибо!
...
Рейтинг: 0 / 0
Поиск значения по всем таблицам БД
    #37796952
AnaceH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
temoxa, как-то так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
 declare @guid uniqueidentifier = '1AF3BFF9-9971-E011-96BD-0015172F23E8'
 declare @script nvarchar(max) = ''
   
 select @script = @script  
        + ' if exists( 
        
                       select *
                        
                         from ' + c.TABLE_SCHEMA + '.' + c.TABLE_NAME + ' 
                         
                        where ' + c.COLUMN_NAME + ' = ''' + cast(@guid as nvarchar(40)) + '''
                        
                      )
              begin
              
               select '''+ c.TABLE_SCHEMA + '.' + c.TABLE_NAME +''', ''' +c.COLUMN_NAME+ '''
               
              end
              '

   from INFORMATION_SCHEMA.COLUMNS c
 
  where DATA_TYPE = 'uniqueidentifier'
  
 exec (@script)
...
Рейтинг: 0 / 0
Поиск значения по всем таблицам БД
    #37796994
temoxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а если искомое значение словесное (например фамилия служащего)?
...
Рейтинг: 0 / 0
Поиск значения по всем таблицам БД
    #37797001
AnaceH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
temoxa,

То Вам надо переделать скрипт так, чтобы он искал строковые значения.
...
Рейтинг: 0 / 0
Поиск значения по всем таблицам БД
    #37797031
Sekoka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Поиск значения по всем таблицам БД
    #37797421
temoxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, Sekoka!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Поиск значения по всем таблицам БД
    #39641919
temoxa,

Как вариант можно воспользоваться расширенным вариантом http://remotehelper.ru/subd/ms-sql-server/ms-sql-server-poisk-guid-po-vsem-tablitsam-bd
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Поиск значения по всем таблицам БД
    #40073518
wildwilduser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно немножко некрофилии.
Поправил запрос до варианта поиска значения типа binary
Вот что получилось

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
set nocount on
declare @name varchar(128), @substr Binary(32), @column varchar(128)
set @substr = 0x846200155D005A0F11E63DA1C289EEA4 --значение, которое будем искать

create table #rslt1
(table_name varchar(128), field_name varchar(128), value binary)

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 = 'binary' 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 #rslt1 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 #rslt1
group by table_name, field_name
order by table_name, field_name
--Если нужно, можем отобразить все найденные значения
select * from #rslt1 order by table_name, field_name
drop table #rslt1
close s
deallocate s



но результат возвращается пустой
Хотя на запрос

Код: sql
1.
2.
3.
4.
DECLARE @binary Binary(32) = 0x846200155D005A0F11E63DA1C289EEA4;
SELECT *
  FROM _Reference297
    WHERE _IDRRef = @binary



Значение возвращается.
Подскажите люди добрые куда копать, сам я (нужное подставить)
Нужен аналог поиска ссылок в 1С для объект.
Каким то чудом туда залезло значение с символами которые 1С не переваривает нужно почистить, тестирование и исправление базы в 1С просьба не предлагать.
...
Рейтинг: 0 / 0
Поиск значения по всем таблицам БД
    #40073753
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wildwilduser,
1. В запросе Вы ищете varbinary, а в строке у Вас поиск как varchar

замените exec на sp|_execute_sql и передавайте параметром
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Поиск значения по всем таблицам БД
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]