在SQLSERVER中,如何遍历某个数据库中所有表结构及表中数据?

fanfyj 2005-09-29 12:46:49
RT
对一个不知道表结构的数据库(有数百张表),我在应用软件中添加了些数据,现在想在数据库中找到这些数据添加在哪张表中?请问有什么办法?多谢!
...全文
449 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zlp321002 2005-10-11
  • 打赏
  • 举报
回复
--参考:
http://blog.csdn.net/zlp321002/archive/2005/06/16/395621.aspx
vivianfdlpw 2005-09-29
  • 打赏
  • 举报
回复
CREATE PROCEDURE spFindTextInColumns (@TableName sysname = NULL,
@StringToLookFor varchar(500))
AS

DECLARE @columnName nvarchar(128),
@dateType nvarchar(128),
@row smallint,
@rowCount int,
@sql nvarchar(1000)

DECLARE string_find_cursor CURSOR FAST_FORWARD FOR
SELECT [name]
FROM SYSOBJECTS
WHERE (
OBJECTPROPERTY(id, N'IsMsShipped') = 0
AND OBJECTPROPERTY(id, N'IsUserTable') = 1
) AND (@TableName IS NULL OR [name] = @TableName)
ORDER BY [name]

OPEN string_find_cursor

FETCH NEXT FROM string_find_cursor
INTO @tableName

SET @StringToLookFor = '%' + @StringToLookFor + '%'

WHILE @@FETCH_STATUS = 0
BEGIN
SET @row = 1

SELECT @rowCount = MAX([ORDINAL_POSITION])
FROM [INFORMATION_SCHEMA].[COLUMNS]
WHERE [TABLE_NAME] = @tableName
GROUP BY [ORDINAL_POSITION]

WHILE @row <= @rowCount
BEGIN
SELECT @columnName = '[' + [COLUMN_NAME] + ']',
@dateType = [DATA_TYPE]
FROM [INFORMATION_SCHEMA].[COLUMNS]
WHERE [TABLE_NAME] = @tableName
AND [ORDINAL_POSITION] = @row
ORDER BY [ORDINAL_POSITION]

SET @row = @row + 1

SET @sql = NULL

IF @dateType IN ( N'char', N'varchar', N'text')
SET @sql = 'SELECT * FROM [' + @tableName + '] WHERE PATINDEX(''' + @StringToLookFor + ''', ' + @columnName + ') > 0'
ELSE IF @dateType IN (N'nchar', N'nvarchar', N'ntext')
SET @sql = 'SELECT * FROM [' + @tableName + '] WHERE PATINDEX(''' + @StringToLookFor + ''', CAST(' + @columnName + ' As TEXT)) > 0'

IF @sql IS NOT NULL
BEGIN
SET @sql = 'IF EXISTS(' + @sql + ') PRINT ''[' + @tableName + '].' + @columnName + ''''
--PRINT (@sql)
EXEC (@sql)
END
END

FETCH NEXT FROM string_find_cursor
INTO @tableName
END

CLOSE string_find_cursor
DEALLOCATE string_find_cursor

GO
WangZWang 2005-09-29
  • 打赏
  • 举报
回复
用事件探查器profiler来跟踪程序执行更直观!
xueguang 2005-09-29
  • 打赏
  • 举报
回复
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_search]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_search]
GO

/*--在整个数据库搜索某个字符串在哪个表的哪个字段中

--邹建 2004.10(引用请保留此信息)--*/

/*--调用示例
use pubs
exec p_search N'l'
--*/
create proc p_search
@str Nvarchar(1000) --要搜索的字符串
as
if @str is null return

declare @s Nvarchar(4000)
create table #t(表名 sysname,字段名 sysname)

declare tb cursor local for
select s='if exists(select 1 from ['+replace(b.name,']',']]')+'] where ['+a.name+'] like N''%'+@str+'%'')
print ''所在的表及字段: ['+b.name+'].['+a.name+']'''
from syscolumns a join sysobjects b on a.id=b.id
where b.xtype='U' and a.status>=0
and a.xtype in(175,239,99,35,231,167)
open tb
fetch next from tb into @s
while @@fetch_status=0
begin
exec(@s)
fetch next from tb into @s
end
close tb
deallocate tb
go
xuxun 2005-09-29
  • 打赏
  • 举报
回复
不错

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧