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

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

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

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

Можно это всё в динамическом SQL, по метаданным базы
...
Рейтинг: 0 / 0
Как искать конкретное значение по всей базе SQL
    #39927355
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как искать конкретное значение по всей базе SQL
    #39927356
Kontox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет в битовых полях не надо
Вот так и искать по другим полям. ... AND COLUMN_NAME2=N'...' AND COLUMN_NAME3=N'...' ...
там 250 таблиц, полей около 1000))
так что надо что то побыстрее. через строчку ))
...
Рейтинг: 0 / 0
Как искать конкретное значение по всей базе SQL
    #39927359
Kontox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"123" может быть не только в mipersid
...
Рейтинг: 0 / 0
Как искать конкретное значение по всей базе SQL
    #39927367
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Как искать конкретное значение по всей базе SQL
    #39927382
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kontox
там 250 таблиц, полей около 1000))
так что надо что то побыстрее. через строчку ))
Я же написал, сделайте динамический запрос из метаданных, если таблиц много, или модель постоянно меняется.
...
Рейтинг: 0 / 0
Как искать конкретное значение по всей базе SQL
    #39927399
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как искать конкретное значение по всей базе SQL
    #39927430
Фотография PsyMisha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
    Как искать конкретное значение по всей базе SQL
        #39929774
    Kontox
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Гость
    Да, эти варианты сработали. Проверил несколько десятков раз)
    ...
    Рейтинг: 0 / 0
    11 сообщений из 11, страница 1 из 1
    Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как искать конкретное значение по всей базе SQL
    Целевая тема:
    Создать новую тему:
    Автор:
    Закрыть
    Цитировать
    Найденые пользователи ...
    Разблокировать пользователей ...
    Читали форум (0):
    Пользователи онлайн (0):
    x
    x
    Закрыть


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