content top

Поиск в текстовых полях всей базы в Microsoft SQL Server

Исправлены ошибочки так что вперед и с музыкой

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
SET concat_null_yields_null ON
DECLARE 
	@collist VARCHAR(MAX),
	@srch_sql VARCHAR(MAX),
	@schemaName VARCHAR(128),
	@tableName VARCHAR(128)
 
DECLARE curs cursor LOCAL static forward_only FOR 
	SELECT DISTINCT c.TABLE_SCHEMA, c.TABLE_NAME
	FROM INFORMATION_SCHEMA.[COLUMNS] c
	WHERE c.DATA_TYPE IN('char', 'varchar', 'nvarchar', 'text')
	AND c.CHARACTER_MAXIMUM_LENGTH >=4
	AND objectproperty(object_id(c.TABLE_SCHEMA + '.'+ c.TABLE_NAME), 'IsUserTable ') = 1
	ORDER BY 1, 2
OPEN curs
while 1=1
BEGIN
 
	fetch NEXT FROM curs INTO @schemaName, @tableName
	IF @@FETCH_STATUS <> 0 break
 
-- Данную строку можно раскомментарить, если хочется видеть, в какой таблице идет поиск в данный момент	
--	raiserror(';%s.%s', 10, 1, @schemaName, @tableName) with nowait
 
	SELECT
		@collist = NULL
 
	SELECT 
		@collist = isnull(@collist + '
	or ', '') +'upper(convert(varchar(8000), ' + c.COLUMN_NAME + ')) like ''%9688982872%''' -- Тут указываем, что и как ищем 
	FROM INFORMATION_SCHEMA.[COLUMNS] c
	WHERE c.TABLE_SCHEMA = @schemaName
	AND c.TABLE_NAME = @tableName
	AND c.DATA_TYPE IN('char', 'varchar', 'nvarchar', 'text')
	AND c.CHARACTER_MAXIMUM_LENGTH >=6
	SET @srch_sql = 'if exists(select * from '+@schemaName+'.'+@tableName+' with(nolock) where '+@collist+')
	raiserror('''+@schemaName+'.'+@tableName+'  - found!'', 10, 1) with nowait'
 
	EXEC(@srch_sql)
END


2 комментария to “Поиск в текстовых полях всей базы в Microsoft SQL Server”

  1. esses:

    it is not work in r2 2008

Комментировать