在表的所有列中搜索值?

Jes*_*sse 10 sql sql-server

我已经找到了答案,但我能找到的只是人们询问如何搜索数据库中所有表的所有列的值.我只想搜索特定表的所有列.人们为所有表格提出的代码问题很复杂,我很难弄清楚它在哪里搜索特定的表格.有人可以帮帮我吗?谢谢

Dav*_*ers 5

只需使用一些第三方工具即可。其中有几项是100%免费的,您不会出错,因为它们可以为您节省大量时间。

ApexSQL搜索(搜索架构和数据),SSMS工具包(搜索架构和数据,但对于SQL Server 2012不免费),SQL搜索(仅搜索数据)。

坦白地说,我不真正理解为什么即使是非常有经验的DBA都可以为此而编写脚本,如果他们可以免费使用一些可以完成这项工作的工具。


Dec*_*r97 1

我修改了这个存储过程,将表名作为第二个参数,然后在该表中搜索数据:

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SearchOneTable]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[SearchOneTable]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROC [dbo].[SearchOneTable]
(
    @SearchStr nvarchar(100) = 'A',
    @TableName nvarchar(256) = 'dbo.Alerts'
)
AS
BEGIN

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

    --SET NOCOUNT ON

    DECLARE @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)
    SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')
    --SET @SearchStr2 = QUOTENAME(@SearchStr, '''') --exact match
    SET @ColumnName = ' '


        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 
    SELECT ColumnName, ColumnValue FROM #Results
END


GO
Run Code Online (Sandbox Code Playgroud)