当前位置: 首页 > 面试题库 >

有什么方法可以在Microsoft SQL Server的每个表的每个字段中找到特定值?

羊舌兴文
2023-03-14
问题内容

有什么方法可以在Microsoft SQL Server的每个表的每个字段中找到特定值?

例如,我希望找到其中带有“ 666333222”的任何记录…可以吗?


问题答案:

您可以尝试以下存储过程来在每个表的每个字段中搜索特定值:

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

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
END

然后像这样使用它:

exec sp_SearchAllTables 'your search text here';


 类似资料:
  • 问题内容: 我必须对一个大型Java项目做一个一般性的说明,但是我对它的了解很少,我想知道是否有确定以下内容的准则: 每个包有多少个类可以被认为是正确的,低或高的(这个项目每个包有3.89个类,对我来说似乎太小了), 每个类有多少种方法?(该项目每个类有6.54个方法… 每个方法的行数?(此项目每种方法大约有7行(对我来说似乎不错,也许有点低)) 我应该指出,这个问题仅涉及体积。我有很多来自质量工

  • 问题内容: 我想从MySQL数据库的所有表的所有字段中搜索给定的字符串,可能使用如下语法: 有可能做这样的事情吗? 问题答案: 您可以浏览模式。它具有所有表和表中所有字段的列表。然后,您可以使用从该表获得的信息来运行查询。 涉及的表是SCHEMATA,TABLES和COLUMNS。有一些外键,使您可以准确地建立在模式中创建表的方式。

  • 问题内容: 最近,我了解了索引的奇妙之处,并且性能得到了极大的提高。但是,据我所知,我似乎找不到该问题的答案。 索引很棒,但是为什么有人不能只索引所有字段以使表变得如此快呢?我确定有充分的理由不这样做,但是三十字段表中的三个字段又如何呢?30个字段中有10个?一个人应该划在哪里,为什么呢? 问题答案: 索引占用内存(RAM)中的空间;索引太多或太大,数据库将不得不在磁盘之间来回交换它们。它们还会增

  • getUserWalable方法发出一些用户,我需要知道为什么他把. subbeOn(Schedulers.io()),而他已经在main funcion上调用它,我提供了这两种方法的截取,我知道,subbeOn将使进程发生在后台线程上,但当他调用它两次时,这会有什么不同,我不知道,因为我理解只是在getUsersWalable中调用一次就足够了

  • 假设我有一个Java类... 我想将这个单独的类与两个不同的服务一起使用。然而,这两种服务在返回数据的方式上有所不同。 ...还有...

  • 文档存在,但筛选时不匹配! 您好,我在我的项目中发现了一个新错误。我正在使用nodejs后端和mongodb数据库。我正在成功插入文档。但有一个特定领域(“proje\u ortagi”)让我感到困惑。因为当我将文档过滤为“\u id”字段时。所有文件都在响应。但当我将文档过滤为“proje\u ortagi”时,有些文档并不是响应。为什么会发生这种情况?我检查“proje\u ortagi”值的