|
Нужно найти слово в базе данных MS SQL 2012 , не зная в какой таблице искать | ☑ | ||
---|---|---|---|---|
0
Аспирант
01.11.13
✎
11:43
|
Доброго всем предпраздничного дня!
Больше конечно относится к SQL но кто сталкивался помогите с задачкой. Нужен скриптик, гугл не помогает |
|||
1
Wobland
01.11.13
✎
11:44
|
это спортивный интерес? никак не сфантазирую практическое применение
|
|||
2
Аспирант
01.11.13
✎
11:45
|
вот нужно определить табличку где есть конкретные слова, реальная задачка
|
|||
3
Аспирант
01.11.13
✎
11:46
|
тупой перебор всех табличек вручную не предлагать )
|
|||
4
Maxus43
01.11.13
✎
11:46
|
к 1с относится или нет? просто в 1с сначала табоичку узнай, потом ищи
|
|||
5
fisher
01.11.13
✎
11:47
|
В смысле, во всех строковых полях всех таблиц БД?
Ну, можно теоретически. Системные таблицы + Transact SQL и динамические запросы. Готового скрипта, извини, нету. Рисовать лень и некогда :) |
|||
6
shuhard
01.11.13
✎
11:47
|
(0)[Нужен скриптик, гугл не помогает]
под дурку косишь ? |
|||
7
Maxus43
01.11.13
✎
11:48
|
>>не зная в какой таблице искать
>>тупой перебор всех табличек вручную не предлагать тут явное логическое противоречие, перебирать все таблицы и их поля придётся по любому |
|||
8
Аспирант
01.11.13
✎
11:48
|
нет пока не связано, нужно из сторонней базы sql собирать данные, но не зная в какой таблице искать - трудно это реализовать
|
|||
9
Аспирант
01.11.13
✎
11:48
|
(7) согласен но не ручками
|
|||
10
fisher
01.11.13
✎
11:49
|
(7) Нет противоречия. Ключевое слово - "вручную"
|
|||
11
Аспирант
01.11.13
✎
11:49
|
(6) найди хоть одну толковую и рабочую ссылку
буду очень благодарен |
|||
12
GANR
01.11.13
✎
11:50
|
||||
13
fisher
01.11.13
✎
11:51
|
(12) А где же скриптик? :)
|
|||
14
GANR
01.11.13
✎
11:51
|
(13) писать лень
|
|||
15
Аспирант
01.11.13
✎
11:52
|
(12) что это дает? допускаю что в скрытых табличках искать надо, но как
|
|||
16
Аспирант
01.11.13
✎
11:53
|
http://habrahabr.ru/qa/16495/
нашел это но похоже не прокатит в 2012 |
|||
17
GANR
01.11.13
✎
11:58
|
(16) Короче, надо как угодно достать таблицы БД и ее колонки с типами и по строковым колонкам ставить фильтры и делать запрос к каждой таблице. Хранимую процедуру, наверное, надо написать.
|
|||
18
GANR
01.11.13
✎
12:01
|
(0) А вообще такие вопросы лучше не на мисте спрашивать, а у аскакал этого сайта http://sql-ex.ru/.
|
|||
19
Аспирант
01.11.13
✎
12:01
|
(17) это все понятно в теории
|
|||
20
Аспирант
01.11.13
✎
12:02
|
(18) попробую у них спросить, решение выложу обязательно
|
|||
21
fisher
01.11.13
✎
12:15
|
(18) Не в кассу. Там более общие задачи решаются.
Лучше на sql.ru |
|||
22
МихаилМ
01.11.13
✎
12:17
|
для версии скл выше 2000 ищите по слову sys.syscolumns
|
|||
23
МихаилМ
01.11.13
✎
12:18
|
+(22)
+ sp_foreachtable() |
|||
24
Аспирант
01.11.13
✎
12:41
|
set concat_null_yields_null on
declare @collist varchar(max), @srch_sql varchar(max), @schemaName varchar(128), @tableName varchar(128) declare curs cursor local static forward_only for select distinct c.TABLE_SCHEMA, c.TABLE_NAME from INFORMATION_SCHEMA.[COLUMNS] c where c.DATA_TYPE in('char', 'varchar', 'nvarchar', 'text') and c.CHARACTER_MAXIMUM_LENGTH >=4 and objectproperty(object_id(c.TABLE_SCHEMA + '.'+ c.TABLE_NAME), 'IsUserTable ') = 1 order by 1, 2 open curs while 1=1 begin fetch next from curs into @schemaName, @tableName if @@FETCH_STATUS <> 0 break -- Данную строку можно раскомментарить, если хочется видеть, в какой таблице идет поиск в данный момент raiserror(';%s.%s', 10, 1, @schemaName, @tableName) with nowait select @collist = null select @collist = isnull(@collist + ' or ', '') +'upper(convert(varchar(8000), ' + c.COLUMN_NAME + ')) like ''%Вася%''' -- Тут указываем, что и как ищем from INFORMATION_SCHEMA.[COLUMNS] c where c.TABLE_SCHEMA = @schemaName and c.TABLE_NAME = @tableName and c.DATA_TYPE in('char', 'varchar', 'nvarchar', 'text') and c.CHARACTER_MAXIMUM_LENGTH >=6 set @srch_sql = 'if exists(select * from '+@schemaName+'.'+@tableName+' with(nolock) where '+@collist+') raiserror('''+@schemaName+'.'+@tableName+' - found!'', 10, 1) with nowait' exec(@srch_sql) end |
|||
25
Аспирант
01.11.13
✎
12:42
|
как и обещал выложил, проверено рабочий!!!
%Вася%' то что ищем! Всем спасибо приятных выходных!!! |
|||
26
Аспирант
01.11.13
✎
12:43
|
спасибо первоисточнику http://www.gotdotnet.ru/blogs/DeColores/7014/
|
|||
27
Kreont
01.11.13
✎
12:45
|
(0) Если база небольшая, можно тупо выгрузить бекап в sql-код (MySQL такое точно умеет), а там хоть Far-ом дальше.
|
|||
28
Аспирант
01.11.13
✎
12:46
|
(27) тоже вариант, только сумеешь определить табличку?
|
|||
29
Kreont
01.11.13
✎
12:47
|
(28) ну да, там ж будет код типа
create table aaa insert|update 'слово поиска' ... |
|||
30
Kreont
01.11.13
✎
12:50
|
(28) так кстати норм выгружать, если надо перенести данные между разными БД (MySQL->Postgres->MSsql->Oracle), после небольших правок файлов бекапа иногда
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |