데이터베이스 미로에서 문자열 검색: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!