SQL: ищите строку в каждом varchar столбце в базе данных

В текстовом поле есть параметр onChanged: вы можете использовать его для передачи функции

TextField(
            keyboardType: TextInputType.number,
            onChange: onChange
            decoration: InputDecoration(
                hintText: 'Enter the number'
            ),
          )

на вашем главном экране, используйте это:

 void onChange(String text) {
 //do stuff here with text like maybe setState
 }
18
задан Andy White 7 May 2009 в 14:19
поделиться

3 ответа

Используя метод, найденный здесь , следующий скрипт генерирует SELECT для всех ((n) var) char столбцов в данной базе данных. Скопируйте / вставьте вывод, удалите самый последний «союз» и выполните .. Вам нужно заменить ЗДОРОВЫЙ ЗДЕСЬ на строку, которую вы ищете.

select 
'select distinct ''' + tab.name + '.' + col.name 
+ '''  from [' + tab.name 
+ '] where [' + col.name + '] like ''%MISSPELLING HERE%'' union ' 
from sys.tables tab 
join sys.columns col on (tab.object_id = col.object_id)
join sys.types types on (col.system_type_id = types.system_type_id) 
where tab.type_desc ='USER_TABLE' 
and types.name IN ('CHAR', 'NCHAR', 'VARCHAR', 'NVARCHAR');
24
ответ дан 30 November 2019 в 07:34
поделиться

Вы можете использовать курсор и представления sys.tables / sys.columns для их просмотра. Дайте мне минуту, и я дам вам код.

Обновление: Вот вы:

declare @col_name nvarchar(50)
declare @sql nvarchar(max)
declare @tbl_name nvarchar(50)
declare @old_str nvarchar(50)
declare @new_str nvarchar(50)

set @old_str = 'stakoverflow'
set @new_str = 'StackOverflow'

declare fetch_name cursor for
select 
    c.name,
    t.name
from 
    sys.columns c
    inner join sys.tables t on c.object_id = t.object_id
    inner join sys.types y on c.system_type_id = y.system_type_id
where
    y.name like '%varchar'
    or y.name like '%text'

open fetch_name

fetch next from fetch_name into @col_name, @tbl_name

while @@fetch_status = 0
begin
    set @sql = 'UPDATE ' + @tbl_name + ' SET ' + 
        @col_name + ' = replace(' + 
            @col_name + ',''' + 
            @old_str + ''',''' + 
            @new_str + ''')'

    exec sp_executesql @sql

    fetch next from fetch_name into @col_name
end

close fetch_name
deallocate fetch_name

Это даст вам все, что вам нужно. Он извлекает из вашей базы данных столбцы varchar, nvarchar, text и ntext, циклически перебирает столбцы и обновляет каждый из них.

Конечно, вы также можете сделать это, чтобы создать объединенный оператор SQL и выполнить одно большое обновление в конец, но эй, это ваши предпочтения.

И для протокола, я не люблю курсоры, но так как мы имеем дело с несколькими столбцами, а не миллионами строк, я в порядке с этим.

4
ответ дан 30 November 2019 в 07:34
поделиться

Версия SQL Server 2000 приведенного выше сценария (от edosoft):

select  
'select distinct ''[' + tab.name + ']'' as TableName, ''[' + col.name + ']'' as ColumnName'
+ ' from [' + users.name + '].[' + tab.name  
+ '] where UPPER([' + col.name + ']) like ''%MISSPELLING HERE%'' union '  
from sysobjects tab  
join syscolumns col on (tab.id = col.id) 
join systypes types on (col.xtype = types.xtype)  
join sysusers users on (tab.uid = users.uid)
where tab.xtype ='U'  
and types.name IN ('char', 'nchar', 'varchar', 'nvarchar'); 
1
ответ дан 30 November 2019 в 07:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: