sql server 2012 数据库所有表里查找某字符串的方法

use JJ2014
DECLARE @key_find NVARCHAR(MAX) = '覃远阳';   --字符串
DECLARE Cursor_Table CURSOR FOR
    SELECT name from sysobjects WHERE xtype = 'u' AND name <> 'dtproperties';
    OPEN Cursor_Table;
    DECLARE @tableName NVARCHAR(MAX);
    FETCH NEXT from Cursor_Table INTO @tableName;
    WHILE @@fetch_status = 0
    BEGIN
    DECLARE @tempSQLText NVARCHAR(MAX) = '';
    DECLARE columnCursor CURSOR FOR
    SELECT Name FROM SysColumns WHERE ID = Object_Id( @tableName ) and
    (
    xtype = 35 or --text
    xtype = 99 or --ntext
    xtype = 167 or --varchar
    xtype = 175 or --char
    xtype = 231 or --nvarchar
    xtype = 239 or --nchar
    xtype = 241 --xml
    )
    OPEN columnCursor;
    DECLARE @columnName NVARCHAR(MAX);
    FETCH NEXT from columnCursor INTO @columnName;
    WHILE @@fetch_status = 0
    BEGIN
        DECLARE @DynamicSQLText NVARCHAR(MAX) = 'IF ( EXISTS ( SELECT * FROM [' + @tableName + '] WHERE [' + @columnName + '] LIKE ''%' + @key_find + '%'' ) ) BEGIN DECLARE @CurrentTableCount Bigint = ( SELECT COUNT(*) From [' + @tableName + '] ); PRINT ''Find : Table [' + @tableName + '], Column [' + @columnName + '], Row Count:'' + CAST( @CurrentTableCount AS NVARCHAR(MAX) ) + ''.''; END';
    EXEC( @DynamicSQLText );
    FETCH NEXT from columnCursor INTO @columnName
    END
    exec(@tempSQLText);
    CLOSE columnCursor;
    DEALLOCATE columnCursor;
    FETCH NEXT from Cursor_Table INTO @tableName;
    END
    CLOSE Cursor_Table;
    DEALLOCATE Cursor_Table;

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

桂ICP备19000498号-3