sql-server - 搜索所有表、所有列中的特定值 SQL Server

标签 sql-server

我有一个特定的值,比如说字符串“comments”。我需要在数据库中找到此内容的所有实例,因为我需要更新格式以将其更改为 (*) 注释。

我该怎么做?数据库采用SQL Server 2000格式。

最佳答案

我刚刚更新了我的博客文章,以纠正您所拥有的脚本中的错误 Jeff,您可以在此处查看更新后的脚本:Search all fields in SQL Server Database

根据要求,这是脚本,以防您需要,但我建议您查看该博客文章,因为我会不时更新它

DECLARE @SearchStr nvarchar(100)
SET @SearchStr = '## YOUR STRING HERE ##'
 
 
-- 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
-- Updated and tested by Tim Gaunt
-- http://www.thesitedoctor.co.uk
-- http://blogs.thesitedoctor.co.uk/tim/2010/02/19/Search+Every+Table+And+Field+In+A+SQL+Server+Database+Updated.aspx
-- Tested on: SQL Server 7.0, SQL Server 2000, SQL Server 2005 and SQL Server 2010
-- Date modified: 03rd March 2011 19:00 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', 'int', 'decimal')
                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
 
DROP TABLE #Results

关于sql-server - 搜索所有表、所有列中的特定值 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1796506/

相关文章:

sql - 基于不同列的值的默认列值

sql - 查询优化方法

sql - 不使用子查询的父子查询

sql-server - 即使 SET PARSEONLY 设置为 ON,SQL Server 也会插入值

sql - 在 SQL WHERE CLAUSE 的变量中使用一串带引号的值

sql-server - 从损坏的 SQL Server 数据库中恢复事务日志

sql-server - 使用 CTE 代替表变量进行递归函数

sql-server - 加载包含链接的 sql server 表的 mdb 时,ms access 崩溃

sql-server - System.Threading.ThreadAbortException : Thread was being aborted

sql - 如何跟踪表中数据的变化?