복붙노트

[SQL] 어떻게 테이블의 모든 열을 검색 할 수 있습니다?

SQL

어떻게 테이블의 모든 열을 검색 할 수 있습니다?

어떻게 SQL Server에서 테이블의 모든 열을 검색 할 수 있습니다?

해결법

  1. ==============================

    1.

    SELECT ...
    FROM yourtable
    WHERE 'val' IN (field1, field2, field3, field4, ...)
    

    경우 정확한 전체 필드 일치를 찾고 있습니다. 당신이 일치하는 하위 문자열을 찾고 있다면, 당신은 먼 길 가야 할 것이다 :

    WHERE field1 LIKE '%val%' or field2 LIKE '%val%' etc....
    
  2. ==============================

    2.당신은 동적 쿼리를 만드는 .. 이런 식으로 할 수 있습니다 ..

    당신은 동적 쿼리를 만드는 .. 이런 식으로 할 수 있습니다 ..

    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)
    
  3. ==============================

    3.나는 이것을 위해, 당신은 당신이 검색하고자하는 컬럼의 목록을 지정해야합니다 모든 바로 가기가 생각하지 않습니다. 난 당신이 자신이 많이 일을하려고 발견하면, 당신은 아마도 DB 설계를 개선 할 수 있다고 주장한다.

    나는 이것을 위해, 당신은 당신이 검색하고자하는 컬럼의 목록을 지정해야합니다 모든 바로 가기가 생각하지 않습니다. 난 당신이 자신이 많이 일을하려고 발견하면, 당신은 아마도 DB 설계를 개선 할 수 있다고 주장한다.

    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%'
    
  4. ==============================

    4.나는 신용을 수는 없지만, 나는이를 발견하고 완벽하게 작동합니다. 당신은에 스키마 이름을 추가뿐만 아니라, 다른 유형을 포함하는 WHERE 절에 추가 데이터 유형을 추가 할 수 있습니다 가입 (아래 주석) 필요한 경우, 검색을 제한합니다.

    나는 신용을 수는 없지만, 나는이를 발견하고 완벽하게 작동합니다. 당신은에 스키마 이름을 추가뿐만 아니라, 다른 유형을 포함하는 WHERE 절에 추가 데이터 유형을 추가 할 수 있습니다 가입 (아래 주석) 필요한 경우, 검색을 제한합니다.

    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

  5. ==============================

    5.나는 하위 쿼리를 사용하여 호세 에르난데스 나란의 대답을 읽은 후 빠른 방법을 찾아 냈다. 이것은 우리가 데이터베이스에 여분의 열을 추가 할 필요가 없다는 장점이있다.

    나는 하위 쿼리를 사용하여 호세 에르난데스 나란의 대답을 읽은 후 빠른 방법을 찾아 냈다. 이것은 우리가 데이터베이스에 여분의 열을 추가 할 필요가 없다는 장점이있다.

    하자, 우리는 열이있는 테이블 사람이 PersonID 모두 검색 및 outputet해야 장소를 포함한 전체 이름이어야합니다 FIRSTNAME, 이름, 핸드폰, 이메일 및 장소, 가정합니다. 코드는 다음과 같은 방법을 살펴보다 :

    SELECT Firstname, Name, Place 
    FROM person NATURAL JOIN 
      (SELECT PersonID, CONCAT(Firstname, ' ', Name, ' ', Cellphone, ' ',
       Email, ' ', Place) search_string FROM person) as all_in_one
    WHERE search_string LIKE '%Hans%' AND search_string LIKE '%Muster%'
    

    당신이 PHP와 같은 다른 언어에서 SQL을 사용하는 경우 루프를 사용하여 WHERE, 당신은 뒤에 부분을 추가 할 수 있습니다. PHP에서 예를 들어 여기 :

    $q = $_GET['q'];
    $words = explode(" ", $q);
    foreach($words as $word){
      if(is_null($search_query)){
         $search_query = "search_string LIKE '%$word%'";
      }else{
         $search_query .= " AND search_string LIKE '%$word%'";
      }     
    }
    

    (주의 :이 예는 잠재적으로 SQL 주입에 사용 될 수있는 GET 변수의 체크를하지 않습니다.)

  6. ==============================

    6.나는 프로젝트 전에 않았다. SQL의 모든 열을 검색 할 수있는 가장 좋은 방법은 각 열 텍스트를 테이블에 새 열을 생성하고 붙여 넣기하는 것입니다 / IT에 데이터를 너무 좋아한다 :

    나는 프로젝트 전에 않았다. SQL의 모든 열을 검색 할 수있는 가장 좋은 방법은 각 열 텍스트를 테이블에 새 열을 생성하고 붙여 넣기하는 것입니다 / IT에 데이터를 너무 좋아한다 :

    표: | ------------------------------------------------- - | | 1 열 | 2 열 | search_column | | ------------------------------------------------- - | | fooxxxxx | barxxxx | fooxxxxx barxxxx | -------------------------------------------------- - |

    표 LIKE %의 키 워드 %에서 SELECT search_column

    그것은 작동 및 SQL 코드를 많이 작성하지 않고 일을 가져옵니다. 또한 훨씬 더 빨리 이러한 유형의 쿼리를 실행하는 것입니다. 유일한 단점은 테이블을 업데이트하고 생성시 search_column이 생성되어야한다는 것이다.

  7. from https://stackoverflow.com/questions/7922744/how-can-i-search-all-columns-in-a-table by cc-by-sa and MIT license