Как я могу искать все столбцы в таблице? - PullRequest
8 голосов
/ 28 октября 2011

Как мне найти все столбцы таблицы в SQL Server?

Ответы [ 5 ]

18 голосов
/ 28 октября 2011
SELECT ...
FROM yourtable
WHERE 'val' IN (field1, field2, field3, field4, ...)

, если вы ищете точные совпадения по всему полю. Если вы ищете совпадения подстрок, вам придется пройти долгий путь:

WHERE field1 LIKE '%val%' or field2 LIKE '%val%' etc....
3 голосов
/ 09 октября 2018

Вы даже можете сделать это таким образом .. Динамически создавая запрос ..

SET NOCOUNT ON;

DECLARE @searchText NVARCHAR(100) = 'Test'
DECLARE @columnName NVARCHAR(100)
DECLARE @tableName NVARCHAR(100) = 'Accounts'
DECLARE @sql NVARCHAR(1000) = 'SELECT * FROM ' + @tableName +' WHERE '

DECLARE columns CURSOR FOR
SELECT sys.columns.name FROM sys.tables
INNER JOIN sys.columns ON sys.columns.object_id = sys.tables.object_id
WHERE sys.tables.name = @tableName

OPEN columns
FETCH NEXT FROM columns
INTO @columnName

WHILE @@FETCH_STATUS = 0

BEGIN

    SET @sql = @sql + @columnName + ' LIKE ''%' + @searchText + '%'' OR '
    FETCH NEXT FROM columns
    INTO @columnName    

END

CLOSE columns;    
DEALLOCATE columns;

SET @sql = LEFT(RTRIM(@sql), LEN(@sql) - 2)

EXEC(@sql)
2 голосов
/ 28 октября 2011

Я не думаю, что для этого есть какие-либо ярлыки, вам нужно указать список столбцов, которые вы хотите найти. Я бы сказал, что если вы попытаетесь сделать это много, вы, вероятно, сможете улучшить дизайн БД.

SELECT * 
FROM MyTable 
WHERE Col1 LIKE '%foo%' OR 
      Col2 LIKE '%foo%' OR  
      Col3 LIKE '%foo%' OR 
      Col4 LIKE '%foo%' OR 
      Col5 LIKE '%foo%' OR 
      Col6 LIKE '%foo%'
1 голос
/ 25 января 2019

Я не могу взять кредит, но я нашел это, и он отлично работает.Вы можете добавить дополнительные типы данных в предложение WHERE, чтобы включить другие типы, а также добавить имя схемы в JOIN (прокомментировано ниже), чтобы ограничить поиск при необходимости.

DECLARE @SQL VARCHAR(MAX) 
DECLARE @SearchString VARCHAR(100) 
SET @SQL='' 

-- ------------------------------------------ 
-- Enter the string to be searched for here : 
SET @SearchString='' 
-- ------------------------------------------ 

SELECT   @SQL = @SQL + 'SELECT CONVERT(VARCHAR(MAX),COUNT(*)) + '' matches in column ''+'''
     + C.name + '''+'' on table '' + ''' + SC.name + '.' + T.name + 
     ''' [Matches for '''+@SearchString+''':] FROM ' + 
     QUOTENAME(SC.name) + '.' + QUOTENAME(T.name) + ' WHERE ' + QUOTENAME(C.name) + 
     ' LIKE ''%' + @SearchString + 
     '%'' HAVING COUNT(*)>0 UNION ALL ' +CHAR(13) + CHAR(10) 

FROM     sys.columns C 
JOIN     sys.tables T ON C.object_id=T.object_id 
JOIN     sys.schemas SC ON SC.schema_id=T.schema_id -- AND SC.name = ''
JOIN     sys.types ST ON C.user_type_id=ST.user_type_id 
JOIN     sys.types SYST ON ST.system_type_id=SYST.user_type_id
    AND ST.system_type_id=SYST.system_type_id 

WHERE    SYST.name IN ('varchar','nvarchar','text','ntext','char','nchar') 

ORDER BY T.name, C.name 

-- Strip off the last UNION ALL 

IF LEN(@SQL)>12 
  SELECT @SQL=LEFT(@SQL,LEN(@SQL)- 12) 

EXEC(@SQL) 
--PRINT @SQL

Ссылка: https://www.sqlmatters.com/Articles/Searching%20all%20columns%20in%20all%20tables%20in%20a%20database.aspx

0 голосов
/ 17 января 2019

Я делал это раньше в проекте.Лучший способ поиска по всем столбцам в SQL - создать новый столбец в таблице и вставить в него текст / данные каждого столбца следующим образом:

table:
| --------------------------------------------------- |
|column1 |колонка2 |search_column |
| --------------------------------------------------- |
|fooxxxxx |barxxxx |fooxxxxx barxxxx |
---------------------------------------------------- |

SELECT search_column FROM table1 LIKE% ключевое слово%

Работает и выполняет работу без написания большого количества кода SQL.Это также намного быстрее, чтобы выполнить этот тип запроса.Единственным недостатком является то, что когда таблица обновляется и создается, должен быть создан столбец search_column.

...