sql server2005 遍历所有数据库及其表

vsmingren 2009-12-01 04:25:45
想实现一个sql程序:

1.遍历所有数据库

2.遍历数据库里的所有表

现在已经实现:

1.已经能够找到所有数据库

2.但是在使用execute,来切换数据库时,没有效果,切换之后依然是先前数据库
查看文档之后,发现使用execute use来改变上下文,只会持续到execute执行完毕

希望各位帮帮忙,有什么好的解决办法吗?

谢谢
...全文
465 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
vsmingren 2009-12-01
  • 打赏
  • 举报
回复
咯咯
vsmingren 2009-12-01
  • 打赏
  • 举报
回复
各位好,还是不行呀,我给出源码,不知各位有什么好的办法吗?

use MZY
DECLARE @catalog_name varchar(40), @scheme_name varchar(50),@table_name varchar(40), @table_type varchar(40),
@message varchar(80), @column_name varchar(40),@data_type varchar(40),
@sqlstring nvarchar(40)

PRINT '-------- Database report --------'

DECLARE scremata_cursor CURSOR FOR
SELECT name
FROM sys.databases

OPEN scremata_cursor

FETCH NEXT FROM scremata_cursor
INTO @catalog_name

WHILE @@FETCH_STATUS = 0
BEGIN
PRINT ' '
SELECT @message = 'Database Name=' + @catalog_name
PRINT @message

select @sqlstring=N'USE '+@catalog_name
execute sp_executesql @sqlstring
--execute xp_use @sqlstring


DECLARE tables_cursor CURSOR FOR
SELECT TABLE_NAME,TABLE_TYPE
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_CATALOG = @catalog_name --当前表的数据库,总是当前数据库

OPEN tables_cursor
FETCH NEXT FROM tables_cursor INTO @table_name,@table_type

WHILE @@FETCH_STATUS = 0
BEGIN

SELECT @message = ' TABLE_NAME=' + @table_name +' TABLE_TYPE=' + @table_type
PRINT @message

DECLARE columns_cursor CURSOR FOR
SELECT COLUMN_NAME,DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @table_name

OPEN columns_cursor
FETCH NEXT FROM columns_cursor INTO @column_name,@data_type

WHILE @@FETCH_STATUS = 0
BEGIN

SELECT @message = ' COLUMN_NAME=' + @column_name + ' DATA_TYPE=' + @data_type
/* PRINT @message */

FETCH NEXT FROM columns_cursor INTO @column_name,@data_type

END

CLOSE columns_cursor
DEALLOCATE columns_cursor

FETCH NEXT FROM tables_cursor INTO @table_name,@table_type

END

CLOSE tables_cursor
DEALLOCATE tables_cursor

FETCH NEXT FROM scremata_cursor
INTO @catalog_name
END

CLOSE scremata_cursor
DEALLOCATE scremata_cursor
GO

vsmingren 2009-12-01
  • 打赏
  • 举报
回复
谢谢各位,网络不好,刷新好慢

我先试试,谢谢
liangCK 2009-12-01
  • 打赏
  • 举报
回复
EXEC sp_MsForeachdb
@command1 = N'
USE ?
EXEC sp_MsForeachtable
@command1 = N''PRINT ''''$'''' '',
@replacechar = N''$''
'
中国风 2009-12-01
  • 打赏
  • 举报
回复
exec sp_msforeachTable ' select * from ?'--表
exec sp_msforeachdb ' use [?] select * from sysobjects'--庫


自定議條件,超過100結果集用表變量或臨時表存儲
zhouyongyang 2009-12-01
  • 打赏
  • 举报
回复
顶,3,4楼的方法
dawugui 2009-12-01
  • 打赏
  • 举报
回复
declare @db as varchar(10) 
set @db = '...'

exec('use ' + @db)



declare @db as varchar(10)
declare @sql as varchar(100)
set @db = '...'
set @sql = 'use ' + @db

exec(@sql)
--小F-- 2009-12-01
  • 打赏
  • 举报
回复
不会 帮顶
dawugui 2009-12-01
  • 打赏
  • 举报
回复
declare @db as varchar(10)
set @db = '...'

exec('use ' + @db)
lweia 2009-12-01
  • 打赏
  • 举报
回复
...我没读懂...

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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