>데이터 베이스 >MySQL 튜토리얼 >SQL Server 데이터베이스의 모든 테이블과 열에서 문자열을 효율적으로 검색하려면 어떻게 해야 합니까?

SQL Server 데이터베이스의 모든 테이블과 열에서 문자열을 효율적으로 검색하려면 어떻게 해야 합니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-05 19:15:42706검색

How Can I Efficiently Search for a String Across All Tables and Columns in a SQL Server Database?

데이터베이스 미로에서 문자열 검색: SQL Server 모험

넓은 데이터베이스를 탐색하는 것은 어려울 수 있습니다. 특히 특정 데이터의 출처를 찾으려고 합니다. SQL Server 2005는 모든 테이블, 행, 열에 대한 포괄적인 검색이라는 강력한 솔루션을 제공합니다.

이 검색을 시작하려면 제공된 코드를 자세히 살펴보겠습니다.

DECLARE
    @search_string  VARCHAR(100),
    @table_name     SYSNAME,
    @table_schema   SYSNAME,
    @column_name    SYSNAME,
    @sql_string     VARCHAR(2000)

검색 문자열, 테이블 정보, SQL 쿼리를 저장할 변수를 선언하는 것으로 시작합니다.

SET @search_string = 'Test'

다음으로 정의합니다. 테이블과 열을 반복하는 커서:

DECLARE tables_cur CURSOR FOR SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'

DECLARE columns_cur CURSOR FOR SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @table_schema AND TABLE_NAME = @table_name AND COLLATION_NAME IS NOT NULL

문자열에만 null이 아닌 데이터 정렬이 있으므로 검색을 기본 테이블로 제한하고 열에 초점을 맞춥니다.

메인 루프가 반복됩니다. 테이블 및 열에 대해:

OPEN tables_cur
FETCH NEXT FROM tables_cur INTO @table_schema, @table_name
WHILE (@@FETCH_STATUS = 0)
BEGIN
    OPEN columns_cur
    FETCH NEXT FROM columns_cur INTO @column_name
    WHILE (@@FETCH_STATUS = 0)
    BEGIN
        SET @sql_string = 'IF EXISTS (SELECT * FROM ' + QUOTENAME(@table_schema) + '.' + QUOTENAME(@table_name) + ' WHERE ' + QUOTENAME(@column_name) + ' LIKE ''%' + @search_string + '%'') PRINT ''' + QUOTENAME(@table_schema) + '.' + QUOTENAME(@table_name) + ', ' + QUOTENAME(@column_name) + ''''
        EXECUTE(@sql_string)
        FETCH NEXT FROM columns_cur INTO @column_name
    END
    CLOSE columns_cur
    DEALLOCATE columns_cur
    FETCH NEXT FROM tables_cur INTO @table_schema, @table_name
END
CLOSE tables_cur
DEALLOCATE tables_cur

각 테이블-열 조합에 대해 제공된 문자열을 검색하고 인쇄하는 SQL 쿼리를 구성합니다.

주의 사항:

이 접근 방식은 효과적이기는 하지만 단점도 있습니다.

  • 특히 대규모 데이터베이스의 경우 속도가 매우 느립니다.
  • 오류 처리가 구현되지 않았으며 엉성할 수 있습니다.
  • 데이터베이스의 복잡한 특성을 완전히 이해하고 중복이나 기타 숨겨진 문제를 피하려면 데이터베이스 전문가에게 문의해야 합니다.

대체 접근 방식:

대규모 데이터베이스를 검색하는 또 다른 옵션은 전체 텍스트 검색(FTS)을 사용하는 것입니다. FTS는 이러한 목적으로 설계되었으며 위의 코드보다 훨씬 빠를 수 있습니다. 그러나 FTS용으로 데이터베이스를 구성해야 합니다.

위 내용은 SQL Server 데이터베이스의 모든 테이블과 열에서 문자열을 효율적으로 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.