【问题标题】:How do i search SQL Server DB for a particular string?如何在 SQL Server DB 中搜索特定字符串?
【发布时间】:2018-05-25 07:10:12
【问题描述】:

我想在 SQL DB 中搜索特定字符串。我知道要搜索的数据库,但我不知道搜索字符串在哪个表中。

【问题讨论】:

标签: sql sql-server


【解决方案1】:

您可以通过单个查询来完成,它可以帮助我找到正在使用的任何对象并解决问题。

声明@TOSEARCH NVARCHAR(50) = '获取'

SELECT m.name, modify_date FROM ( SELECT DISTINCT so.name FROM syscomments sc INNER JOIN sysobjects so ON sc.id=so.id WHERE sc.TEXT LIKE '%'+@ToSearch+'%' ) m LEFT JOIN sys.objects ON sys.objects.name = m.name ORDER BY modify_date DESC

【讨论】:

    【解决方案2】:

    看看下面的代码是否可以帮助你。这个代码我在这个site 中得到。我没有尝试过,但我知道一个尝试过并说我工作的人。

    DECLARE @SQL VARCHAR(8000)
    DECLARE @filtro VARCHAR(200)
    DECLARE @filtro_www VARCHAR(200)
    
    -- start sql declaration
    SET @SQL = ''
    SET @filtro = '%text_searched%'
    
    SELECT
       tabelas.name   AS Tabela 
      ,colunas.name   AS Coluna
      ,tipos.name     AS Tipo
      ,colunas.length AS Tamanho
    INTO
      #result
    FROM 
      sysobjects tabelas
      INNER JOIN syscolumns colunas
      ON colunas.id = tabelas.id
      --
      INNER JOIN systypes tipos
      ON tipos.xtype = colunas.xtype
    WHERE 
      tabelas.xtype = 'u'
        AND
      -- put here the type of column that will be search
      tipos.name IN('text', 'ntext', 'varchar', 'nvarchar')
    
    
    -- cursor to search into table
    DECLARE cTabelas cursor LOCAL fast_forward FOR
    SELECT DISTINCT Tabela FROM #result
    
    DECLARE @nomeTabela VARCHAR(255)
    
    OPEN cTabelas
    
    fetch NEXT FROM cTabelas INTO @nomeTabela
    
    while @@fetch_status = 0
    BEGIN
    
      -- cursor to search for all columns in the current table
      DECLARE cColunas cursor LOCAL fast_forward FOR
      SELECT Coluna, Tipo, Tamanho FROM #result WHERE Tabela = @nomeTabela
    
      DECLARE @nomeColuna VARCHAR(255)
      DECLARE @tipoColuna VARCHAR(255)
      DECLARE @tamanhoColuna VARCHAR(255)
    
      OPEN cColunas
    
      -- mount the columns from select statement
      fetch NEXT FROM cColunas INTO @nomeColuna, @tipoColuna, @tamanhoColuna
    
      while @@fetch_status = 0
      BEGIN
        -- declare variable
        SET @SQL = 'declare @hasresults bit' + CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10)
        -- cria o select
        SET @SQL = @SQL + 'select' + CHAR(13) + CHAR(10)
        SET @SQL = @SQL + CHAR(9) + '''' + @nomeTabela + ''' AS NomeTabela'
        SET @SQL = @SQL + CHAR(9) + ',' + @nomeColuna + CHAR(13) + CHAR(10)
        -- add a column with type and size
        SET @SQL = @SQL  + CHAR(9) + ',' + '''' + @tipoColuna + ''' AS ''' + @nomeColuna + '_Tipo''' + CHAR(13) + CHAR(10)
        SET @SQL = @SQL  + CHAR(9) + ',' + 'DATALENGTH(' + @nomeColuna + ') AS ''' + @nomeColuna + '_Tamanho_Ocupado''' + CHAR(13) + CHAR(10)    
        SET @SQL = @SQL  + CHAR(9) + ',' + '''' + @tamanhoColuna + ''' AS ''' + @nomeColuna + '_Tamanho_Maximo''' + CHAR(13) + CHAR(10)
    
        -- define temporary table(#result)
        SET @SQL = @SQL + 'into' + CHAR(13) + CHAR(10) + CHAR(9) + '#result_' + @nomeTabela + CHAR(13) + CHAR(10)
        -- add the from statement
        SET @SQL = @SQL +  'from' + CHAR(13) + CHAR(10) + CHAR(9) + @nomeTabela + CHAR(13) + CHAR(10)
        -- start assembly of the clause where
        SET @SQL = @SQL + 'where' + CHAR(13) + CHAR(10)
        SET @SQL = @SQL + CHAR(9) + @nomeColuna + ' like ''' + @filtro + '''' + CHAR(13) + CHAR(10)
    
        SET @SQL = @SQL + CHAR(13) + CHAR(10) + 'select @hasresults = count(*) from #result_' + @nomeTabela + CHAR(13) + CHAR(10)
        SET @SQL = @SQL + CHAR(13) + CHAR(10) + 'if @hasresults > 0'
        SET @SQL = @SQL + CHAR(13) + CHAR(10) + 'begin'
        SET @SQL = @SQL + CHAR(13) + CHAR(10) + CHAR(9) + 'select * from #result_' + @nomeTabela
        SET @SQL = @SQL + CHAR(13) + CHAR(10) + 'end' + CHAR(13) + CHAR(10)
        SET @SQL = @SQL + CHAR(13) + CHAR(10) + 'drop table #result_' + @nomeTabela
        SET @SQL = @SQL + CHAR(13) + CHAR(10)
    
        fetch NEXT FROM cColunas INTO @nomeColuna, @tipoColuna, @tamanhoColuna
        -- uncomment the line below to see Sql generated into window messages
        -- print @sql
        EXEC(@SQL)
        SET @SQL = ''
      END
    
      close cColunas
      deallocate cColunas
    
      fetch NEXT FROM cTabelas INTO @nomeTabela
    END
    
    close cTabelas
    deallocate cTabelas
    
    DROP TABLE #result
    

    葡萄牙语有一些名字,但只是名字,你可以替换。只是名字。

    【讨论】:

      猜你喜欢
      • 2023-03-07
      • 2021-12-02
      • 1970-01-01
      • 2012-02-29
      • 1970-01-01
      • 1970-01-01
      • 2013-03-25
      • 2016-02-10
      • 1970-01-01
      相关资源
      最近更新 更多