使用SQL查询字符串出现在数据库中的位置

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

搜索整个数据库的方法
有时候数据库太大,有个数据不知道存在数据库的哪些位置,我们可以直接搜索整个数据库,看看数据出现在了哪些表的哪些字段,找出这些表和字段后,再搜索看看是否是我们需要的信息。

方法是使用存储过程和游标去遍历整个数据库的所有表及列。

使用syscolumns,sysobjects查找出所有的表及表的字段,从每个字段中搜索是否存在我们感兴趣的数据。

CREATE PROCEDURE[dbo].[SP_FindValueInDB]
(
@value VARCHAR(1024)
)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SETNOCOUNTON;
DECLARE@sql VARCHAR(1024)
DECLARE@table VARCHAR(64)
DECLARE@column VARCHAR(64)
CREATETABLE#t(
tablename VARCHAR(64),
columnname VARCHAR(64)
)
DECLARE TABLES CURSOR
FOR
SELECT ,
FROM syscolumns c
INNERJOIN sysobjects o ON c.id=o.id
WHERE o.type='U'AND c.xtype IN(167, 175, 231, 239)
ORDERBY ,
OPEN TABLES
FETCHNEXTFROM TABLES
INTO@table,@column
WHILE@@FETCH_STATUS= 0
BEGIN
SET@sql='IF EXISTS(SELECT NULL FROM ['+@table+'] '
SET@sql=@sql+'WHERE RTRIM(LTRIM(['+@column+'])) LIKE ''%'+@value+'%'') '
SET@sql=@sql+'INSERT INTO #t VALUES ('''+@table+''', '''
SET@sql=@sql+@column+''')'
EXEC(@sql)
FETCHNEXTFROM TABLES
INTO@table,@column
END
CLOSE TABLES
DEALLOCATE TABLES
SELECT*
FROM#t
DROPTABLE#t
End
EXEC [dbo].[SP_FindValueInDB] ‘南昌’。

相关文档
最新文档