Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > Поиск по БД


Автор: Neymexa 1.4.2010, 10:17
как найти запись в БД не зная в какой таблице она находится?

ниже приведенное не помогает

Код

01.set concat_null_yields_null on
02.declare 
03.    
@collist varchar(max), 
04.    
@srch_sql varchar(max), 
05.    
@schemaName varchar(128), 
06.    
@tableName varchar(128) 
07. 
 
08.declare curs cursor local static forward_only for 
09.    
select distinct c.TABLE_SCHEMA, c.TABLE_NAME 
10.    
from INFORMATION_SCHEMA.[COLUMNS] c 
11.    
where c.DATA_TYPE in('char', 'varchar', 'nvarchar', 'text') 
12.    
and c.CHARACTER_MAXIMUM_LENGTH >=4 
13.    
and objectproperty(object_id(c.TABLE_SCHEMA + '.'+ c.TABLE_NAME), 'IsUserTable ') = 1 
14.    
order by 1, 2 
15.open curs 
16.while 1=1 
17.begin
18. 
 
19.    
fetch next fr om curs into @schemaName, @tableName 
20.    
if @@FETCH_STATUS <> 0 break 
21. 
 
22.-- Данную строку можно раскомментарить, если хочется видеть, в какой таблице идет поиск в данный момент  
23.--  raiserror(';%s.%s', 10, 1, @schemaName, @tableName) with nowait 
24. 
 
25.    
select
26.        
@collist = null
27.         
 
28.    
select 
29.        
@collist = isnull(@collist + ' 
30.    
or ', '') +'upper(convert(varchar(8000), ' + c.COLUMN_NAME + ')) like ''%ЛЮТИК%''' -- Тут указываем, что и как ищем  
31.    
from INFORMATION_SCHEMA.[COLUMNS] c 
32.    
where c.TABLE_SCHEMA = @schemaName 
33.    
and c.TABLE_NAME = @tableName 
34.    
and c.DATA_TYPE in('char', 'varchar', 'nvarchar', 'text') 
35.    
and c.CHARACTER_MAXIMUM_LENGTH >=6 
36.    
set @srch_sql = 'if exists(select * from '+@schemaName+'.'+@tableName+' with(nolock) where '+@collist+') 
37.    
raiserror('''+@schemaName+'.'+@tableName+' - found!'', 10, 1) with nowait'
38.     
 
39.    
exec(@srch_sql) 
40.end

Автор: Akina 1.4.2010, 11:25
Цитата(Neymexa @  1.4.2010,  11:17 Найти цитируемый пост)
как найти запись в БД не зная в какой таблице она находится?

Вероятно, имеется несколько таблиц одинаковой структуры, и в одной из них есть запись с необходимыми параметрами, которую надо получить вместе с именем таблицы? тогда...

Код

select fieldA, fieldB, ... , fieldN, 'Table1' as Source
from table1
where fieldM in ( ... )
union 
select fieldX, fieldY, ... , fieldZ, 'Table2'
from table2
where fieldK in ( ... )
union
...


PS. Сама постановка вопроса завораживает...

Автор: Neymexa 1.4.2010, 11:30
сори если плохо объяснил.

вобщем представьте ситуацию дали написанную прогу(субд ms sql 2008) и какие данные в каких таблицах есть не знаешь, а таблиц >500.

 smile 

Автор: tusha 1.4.2010, 13:39
самое простое - если база не очень по размеру велика - експотрнуть ее в тесктовый файл и потом искать  smile 
ЗЫ: не хватает грепа под мсскл

Добавлено через 11 минут и 11 секунд
а вообще помнится гдето на sql.ru была такая статья или ФАК

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)