如何在整个数据库中搜索字符串或文本? [英] How to search a string or text in entire database?

查看:59
本文介绍了如何在整个数据库中搜索字符串或文本?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好b $ b

请告诉我一个查询,搜索数据库中所有表及其行中的字符串?



问候,

DhivyaJ

Hi
Please tell me a query to search a string in all the tables and its rows in a database?

Regards,
DhivyaJ

推荐答案

您好,



试试这个查询。它由Narayana Vyas Kondreddi撰写。



Hello ,

try this query . It was written by Narayana Vyas Kondreddi.

CREATE PROC SearchAllTables 
(
@SearchStr nvarchar(100)
)
AS
BEGIN

-- Copyright © 2002 Narayana Vyas Kondreddi. All rights reserved.
-- Purpose: To search all columns of all tables for a given search string
-- Written by: Narayana Vyas Kondreddi
-- Site: http://vyaskn.tripod.com
-- Tested on: SQL Server 7.0 and SQL Server 2000
-- Date modified: 28th July 2002 22:50 GMT


CREATE TABLE #Results (ColumnName nvarchar(370), ColumnValue nvarchar(3630))

SET NOCOUNT ON

DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)
SET  @TableName = ''
SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')

WHILE @TableName IS NOT NULL
BEGIN
    SET @ColumnName = ''
    SET @TableName = 
    (
        SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
        FROM    INFORMATION_SCHEMA.TABLES
        WHERE       TABLE_TYPE = 'BASE TABLE'
            AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
            AND OBJECTPROPERTY(
                    OBJECT_ID(
                        QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
                         ), 'IsMSShipped'
                           ) = 0
    )

    WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)
    BEGIN
        SET @ColumnName =
        (
            SELECT MIN(QUOTENAME(COLUMN_NAME))
            FROM    INFORMATION_SCHEMA.COLUMNS
            WHERE       TABLE_SCHEMA    = PARSENAME(@TableName, 2)
                AND TABLE_NAME  = PARSENAME(@TableName, 1)
                AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar')
                AND QUOTENAME(COLUMN_NAME) > @ColumnName
        )

        IF @ColumnName IS NOT NULL
        BEGIN
            INSERT INTO #Results
            EXEC
            (
                'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630) 
                FROM ' + @TableName + ' (NOLOCK) ' +
                ' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2
            )
        END
    END 
END

SELECT ColumnName, ColumnValue FROM #Results
 END
 
 
exec SearchAllTables @SearchStr='Petrol'





谢谢



thanks


这不是一个非常实用的请求 - SQL希望你查看特定的表和特定的列,而不是尝试在任何地方搜索,所以它根本就没有设置。



尽管如此: -tables-rows-and-a-sqll-server-db [ ^ ] - 但正如他所说,这将是是非常慢,非常,非常讨厌。



我不会这样做 - 我会使用我对数据库的人类知识以及可能的字段包含我想要搜索特定表和列的信息。
That's not a very practical request - SQL expects you to look at specific tables, and specific columns, rather than try to search everywhere, so it isn;t set up for that at all.

It is possible though: http://stackoverflow.com/questions/591853/search-for-a-string-in-an-all-the-tables-rows-and-columns-of-a-sqll-server-db[^] - but as he says, this will be hirrifically slow, and very, very nasty.

I wouldn't do it - I'd use my "human knowledge" of the database and what fields are likely to contain the info I was looking for to search specific tables and columns only.


这篇关于如何在整个数据库中搜索字符串或文本?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆