Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как искать конкретное значение по всей базе SQL / 11 сообщений из 11, страница 1 из 1
17.02.2020, 11:04
    #39927326
Kontox
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как искать конкретное значение по всей базе SQL
подскажите, пожалуйста, как искать конкретное значение "123" по всем таблицам базы

Я знаю как по всей базе искать конкретное поле
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME=N'mipersid';

А как найти поле , где есть значение 123 по всем полям всех таблиц базы
...
Рейтинг: 0 / 0
17.02.2020, 11:08
    #39927327
andy st
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как искать конкретное значение по всей базе SQL
Kontox,
а в битовых полях тоже искать?
...
Рейтинг: 0 / 0
17.02.2020, 11:34
    #39927349
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как искать конкретное значение по всей базе SQL
Kontox
Я знаю как по всей базе искать конкретное поле
Вот так и искать по другим полям. ... AND COLUMN_NAME2=N'...' AND COLUMN_NAME3=N'...' ...

И селект для каждой таблицы. Либо по отдельности, либо одним запросом с UNION

Можно это всё в динамическом SQL, по метаданным базы
...
Рейтинг: 0 / 0
17.02.2020, 11:45
    #39927355
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как искать конкретное значение по всей базе SQL
alexeyvg
Kontox
Я знаю как по всей базе искать конкретное поле
Вот так и искать по другим полям. ... AND COLUMN_NAME2=N'...' AND COLUMN_NAME3=N'...' ...

И селект для каждой таблицы. Либо по отдельности, либо одним запросом с UNION

Можно это всё в динамическом SQL, по метаданным базы
Только, конечно, не
Код: sql
1.
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME=N'mipersid';

А значение:
Код: sql
1.
2.
select 'MyTable' 
where exists(select * from MyTable where mipersid like '123')

где MyTable - таблица, найденная предыдущим запросом, из метаданных
...
Рейтинг: 0 / 0
17.02.2020, 11:46
    #39927356
Kontox
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как искать конкретное значение по всей базе SQL
нет в битовых полях не надо
Вот так и искать по другим полям. ... AND COLUMN_NAME2=N'...' AND COLUMN_NAME3=N'...' ...
там 250 таблиц, полей около 1000))
так что надо что то побыстрее. через строчку ))
...
Рейтинг: 0 / 0
17.02.2020, 11:47
    #39927359
Kontox
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как искать конкретное значение по всей базе SQL
"123" может быть не только в mipersid
...
Рейтинг: 0 / 0
17.02.2020, 11:55
    #39927367
andy st
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как искать конкретное значение по всей базе SQL
Kontox,
Код: sql
1.
2.
3.
4.
5.
6.
declare @hz varchar(100)='123'
select 
'select * from ['+s.name+'] where ['+c.name+'] like ''%'+@hz+'%''' runme
from sys.syscolumns c
join sys.sysobjects s on c.id = s.id
where s.xtype = 'U' and c.xtype = 167



для xtype вытащить нужные кода из sys.types
...
Рейтинг: 0 / 0
17.02.2020, 12:18
    #39927382
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как искать конкретное значение по всей базе SQL
Kontox
там 250 таблиц, полей около 1000))
так что надо что то побыстрее. через строчку ))
Я же написал, сделайте динамический запрос из метаданных, если таблиц много, или модель постоянно меняется.
...
Рейтинг: 0 / 0
17.02.2020, 12:36
    #39927399
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как искать конкретное значение по всей базе SQL
...
Рейтинг: 0 / 0
17.02.2020, 13:11
    #39927430
PsyMisha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как искать конкретное значение по всей базе SQL
Kontox, Есть парочку вариантов, большинство случаев помогали за прошедшие года, но не на 100% - попробуйте
  • Вариант 1
  • Код: 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.
    38.
    39.
    40.
    41.
    42.
    43.
    44.
    45.
    46.
    47.
    48.
  • USE [%DatabaseName%]
  • SET NOCOUNT ON DECLARE @Filter AS NVARCHAR(MAX) DECLARE @SQL AS NVARCHAR(MAX) DECLARE @count_total as INT DECLARE @count as INT DECLARE @progress as varchar(12) --################################################## SET @Filter = 'Some custom text' --################################################## IF OBJECT_ID('Tempdb..#MyTempTable') IS NOT NULL DROP TABLE #MyTempTable CREATE TABLE #MyTempTable (MyData NVARCHAR(MAX)) INSERT INTO #MyTempTable SELECT 'IF EXISTS (SELECT * FROM [' + tables.name + '] WHERE CAST([' + col.name + '] as VARCHAR(MAX)) LIKE ''%'+@Filter+'%'')' + ' SELECT TOP 1 ''' + tables.name + '/' + col.name +''' as Table_Column, ['+ col.name + '] as Value FROM ' + tables.name + ' WHERE CAST([' + col.name + '] as VARCHAR(MAX)) LIKE ''%'+@Filter+'%''' FROM sys.sysobjects as tables INNER JOIN sys.syscolumns as col ON tables.id = col.id WHERE tables.xtype = 'U' ORDER BY 1 SELECT @count_total = COUNT(*) FROM #MyTempTable SET @count = 1 DECLARE generator CURSOR FAST_FORWARD FOR SELECT MyData FROM #MyTempTable OPEN generator FETCH NEXT FROM Generator INTO @SQL WHILE @@FETCH_STATUS = 0 BEGIN SET @progress = cast(@count as varchar(5)) + '/' + cast(@count_total as varchar(5)) SET @count = @count + 1 PRINT @progress -- PRINT @SQL EXEC sp_ExecuteSQL @SQL FETCH NEXT FROM generator INTO @SQL END CLOSE generator DEALLOCATE generator
      Вариант 2
  • Код: 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.
    38.
    39.
    40.
    41.
    42.
    43.
    44.
    45.
    46.
    47.
    48.
    49.
    50.
    51.
    52.
    53.
    54.
    55.
    56.
    57.
    58.
    59.
    60.
    61.
  • USE [%DatabaseName%]
  • DECLARE @SearchStr nvarchar(100) SET @SearchStr = 'Some custom text' CREATE TABLE #Results (ColumnName nvarchar(370), ColumnValue nvarchar(3630)) SET NOCOUNT ON DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110) SET @TableName = '' SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''') WHILE @TableName IS NOT NULL BEGIN SET @ColumnName = '' SET @TableName = ( SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName AND OBJECTPROPERTY( OBJECT_ID( QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) ), 'IsMSShipped' ) = 0 ) WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL) BEGIN SET @ColumnName = ( SELECT MIN(QUOTENAME(COLUMN_NAME)) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = PARSENAME(@TableName, 2) AND TABLE_NAME = PARSENAME(@TableName, 1) AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar', 'int', 'decimal') AND QUOTENAME(COLUMN_NAME) > @ColumnName ) IF @ColumnName IS NOT NULL BEGIN INSERT INTO #Results EXEC ( 'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630) FROM ' + @TableName + ' (NOLOCK) ' + ' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2 ) END END END SELECT ColumnName, ColumnValue FROM #Results DROP TABLE #Results
    ...
    Рейтинг: 0 / 0
    22.02.2020, 15:49
        #39929774
    Kontox
    Гость
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Как искать конкретное значение по всей базе SQL
    Да, эти варианты сработали. Проверил несколько десятков раз)
    ...
    Рейтинг: 0 / 0
    Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как искать конкретное значение по всей базе SQL / 11 сообщений из 11, страница 1 из 1
    Целевая тема:
    Создать новую тему:
    Автор:
    Найденые пользователи ...
    Разблокировать пользователей ...
    Читали форум (0):
    Пользователи онлайн (0):
    x
    x
    Закрыть


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