【发布时间】:2018-05-25 07:10:12
【问题描述】:
我想在 SQL DB 中搜索特定字符串。我知道要搜索的数据库,但我不知道搜索字符串在哪个表中。
【问题讨论】:
标签: sql sql-server
我想在 SQL DB 中搜索特定字符串。我知道要搜索的数据库,但我不知道搜索字符串在哪个表中。
【问题讨论】:
标签: sql sql-server
您可以通过单个查询来完成,它可以帮助我找到正在使用的任何对象并解决问题。
声明@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
【讨论】:
看看下面的代码是否可以帮助你。这个代码我在这个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
葡萄牙语有一些名字,但只是名字,你可以替换。只是名字。
【讨论】: