有没有办法在SQL Server中的数据库的所有表中搜索字符串?

我想搜索字符串,比如john.结果应该显示包含john的表及其各自的行.

推荐答案

如果您和我一样,在生产环境中有一定的限制,那么您可能希望使用表变量而不是临时表,使用特殊查询而不是创建过程.

当然,根据您的sql server实例,它必须支持表变量.

我还添加了一个USE语句来缩小搜索范围

USE DATABASE_NAME
DECLARE @SearchStr nvarchar(100) = 'SEARCH_TEXT'
DECLARE @Results TABLE (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

Sql相关问答推荐

按postquist中的日期查询json列

Postgres JSONB对象筛选

在SQL中将相同且紧挨着的元素进行分组

在Postgres中实现合并功能的干净方法,因为当目标/源不匹配时

雅典娜嵌套Json提取液

数据库SQL-CTE命名空间(错误?)使用临时视图

来自按PostgreSQL分组的最小日期

数据库SQL PARSE_SYNTAX_ERROR

如何使用不重复的单个顶级字段(列)向json数组 Select 多行

违反了完整性约束-值存在时找不到父键

不存在记录的国外关键点

为什么SQL in中的空子查询有时被视为null

Snowflake 中的分层数据

获取主表条目,其中最新的辅助条目是 6 个月前

如何根据 SQL 中的阈值标记一个集群中的所有值?

错误:postgresql 中缺少表评级的 FROM 子句条目

为什么 get_json_object() 无法从存储在 Hive SQL 表中的 JSON 中提取值?

T-SQL 查询计算日期在其他列中定义的日期之间绑定的行数

基于源表的 SQL INSERT、UPDATE 和 DELETE

在时态表和非时态表之间使用 EXCEPT 的 SQL 子查询给出表达式错误数