Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2013, 20:25   #1
Rost93
Форумчанин
 
Регистрация: 05.06.2011
Сообщений: 249
По умолчанию Не много улучшить скрипт

Всем здравия!
В общем у меня есть скрипт SQL, который делает поиск по базе данных в MS SQL.
Код:
set nocount on
declare @name varchar(128), @substr nvarchar(4000), @column varchar(128)
set @substr = '%ТЕКСТ%' --фрагмент строки, который будем искать

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') 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 + ' like ''' + @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.
Я в строку "where data_type in" добавлял 'int', когда сценарий доходит до столбца int выдает Operand type clash: int is incompatible with ntext
В строке "set @substr" писал без кавычек, только цифры и т.п. выдает тоже самое

Кто знает как исправить, помогите пожалуйста!
Чтобы быть жизнеспособным, нужно приспосабливаться к любой среде. © Хохот Шамана

Последний раз редактировалось Stilet; 21.02.2013 в 21:59.
Rost93 вне форума Ответить с цитированием
Старый 21.02.2013, 21:05   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Ну уж если есть необходимость с помощью LIKE искать в int полях строки (пусть даже состощие из цифр), то преобразуйте значение из поля int в varchar. С помощью CAST. Но все равно не понимаю идеи такого поиска. Нонсенс. А как, например, с NUMERIC полями?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 22.02.2013, 20:10   #3
Rost93
Форумчанин
 
Регистрация: 05.06.2011
Сообщений: 249
По умолчанию

Значит есть глобальная задача, получить базу данных запчастей из программы VIDA. В программе куча баз данных и в каждой базе данных огромное количество таблиц. Я нашел таблицу в которой указаны артикулы всех запчастей, остальные столбцы это различные id и code теперь нужно найти связь между найденной таблицей и остальными данными по данным в столбцах, поэтому мне нужен скрипт который бы искал по id, тип столбца int.
Соответственно преобразовывать тип столбцов не могу.
Чтобы быть жизнеспособным, нужно приспосабливаться к любой среде. © Хохот Шамана
Rost93 вне форума Ответить с цитированием
Старый 22.02.2013, 20:21   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
Соответственно преобразовывать тип столбцов не могу
В запросе можете
Код:
... WHERE CAST(PoleInt AS varchar(10)) LIKE '%54321%'
И совсем не обязательно по int полям искать по LIKE. Попробуйте условия вида WHERE PoleInt=54321
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 22.02.2013 в 20:26.
Аватар вне форума Ответить с цитированием
Старый 22.03.2013, 19:40   #5
Rost93
Форумчанин
 
Регистрация: 05.06.2011
Сообщений: 249
По умолчанию

Аватар Можете на примере показать что куда нужно дописать чтобы можно было искать по полям типа Int. А то честно говоря я плохо в том коде разбираюсь, и не очень понял Вашу мысль.
Чтобы быть жизнеспособным, нужно приспосабливаться к любой среде. © Хохот Шамана
Rost93 вне форума Ответить с цитированием
Старый 22.03.2013, 21:40   #6
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

еще вернее... он ничего не понимает ни в SQL ни в php .. ни в чем.. главное для него - чаще спрашивать и ждать пока за него решат
ADSoft вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как улучшить форум. Гриха О форуме и сайтах клуба 2798 30.11.2011 03:03
Улучшить макрос Севастьянов Microsoft Office Excel 0 22.09.2011 10:37
Как улучшить код kirza Общие вопросы Delphi 10 19.01.2011 18:14
Как улучшить fps ? minatavr84 Компьютерное железо 2 26.03.2009 23:59