急:动态获取SQLserver2008数据库名称并且根据数据库名称获得当前库的表中数据集.

13abyKnight 2013-03-25 11:08:45
1,为什么是动态获取数据库呢?
答:脚本每天都会创建新的数据库且库中有唯一的一张表名称,所以,需要获取当天的库中的数据信息。

2,如何的获取当天多个数据库中表数据信息呢?
答:
1.我可以根据sysdatabases系统表获取当天多个新的数据库数据信息.
2.根据数据库名称可获得当前库的里的表名
3.根据表名获取当天表中的数据信息.
4.最终将所获取的数据集统计存储在一个表信息中即可.


3,为何我知道流程缺不知道怎么写呢?
答:我是一名ORACLE人员。所以,对于SERVER一点都不清楚。

按照ORACLE来说
for 数据名称
for 表名
select * from 动态表名
inser into 表名

如果,我还没有说明白的话,那我真的没有脾气啦。

例子:


DECLARE CountTableRecords CURSOR READ_ONLY FOR
--我需要在外层加一个数遍历数据库名称的循环.
--根据数据库名称遍历表名的循环.
--在根据表名进行查询数据信息
--这句是获得当前库中所用的用户表面

SELECT sst.name,
Schema_name(sst.schema_id)
FROM sys.tables sst
WHERE sst.TYPE = 'U'

DECLARE @name VARCHAR(80),

@schema VARCHAR(40)

OPEN CountTableRecords
-- 根据表名进行遍历统计表数据信息.
FETCH NEXT FROM CountTableRecords INTO @name, @schema

WHILE ( @@FETCH_STATUS <> -1 )

BEGIN


IF ( @@FETCH_STATUS <> -2 )
BEGIN

PRINT @name
DECLARE @sql NVARCHAR(1024)

SET @sql='DECLARE @count INT SELECT @count=COUNT(1) FROM ' + Quotename(@schema)
+

'.' + Quotename(@name) +' PRINT @count'

EXEC Sp_executesql @sql

END

FETCH NEXT FROM CountTableRecords INTO @name, @schema

END
CLOSE CountTableRecords

DEALLOCATE CountTableRecords

GO
...全文
503 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
13abyKnight 2013-03-26
  • 打赏
  • 举报
回复
USE [TEST]
GO
/****** Object:  StoredProcedure [dbo].[getTableRecord]    Script Date: 03/26/2013 10:57:32 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--这是动态读取数据库名称,根据数据库名称获取当前用户表名
ALTER procedure [dbo].[getTableRecord]
as
--清空数据
truncate table FirewallLog
--定义临时表存储表名
declare @tables table(name varchar(50))
--数据库名称
declare @databaseName varchar(200)
--数据库所对应的表名
declare @tbName varchar(200)

declare cursor_database cursor for
select  
data.name 
from sys.databases data
where  Convert(varchar(100),create_date,23)=CONVERT(varchar(90), GETDATE(), 23)
and SUBSTRING(data.name,17,3) ='FWS'
order by [name]

open cursor_database

fetch next from cursor_database into @databaseName

while @@fetch_status=0

begin
	insert into @tables

		exec('select ''dbo.''+name from '+@databaseName+'.sys.tables')

			declare cursor_tb cursor for

			select name from @tables order by [name]

	open cursor_tb

			fetch next from cursor_tb into @tbName
	
			while @@fetch_status=0
		begin
	
	insert into FirewallLog
	
		exec('select * from ['+@databaseName+'].'+@tbName+'')
	
			fetch next from cursor_tb into @tbName
	
		end
	
			close cursor_tb
	
			deallocate cursor_tb

			fetch next from cursor_database into @databaseName

end

 close cursor_database

deallocate cursor_database

加以修改
szm341 2013-03-25
  • 打赏
  • 举报
回复
你逻辑很正确,写法也可以,还有什么疑问啊?
13abyKnight 2013-03-25
  • 打赏
  • 举报
回复
难道高手都已经不再CSDN了吗?
發糞塗牆 2013-03-25
  • 打赏
  • 举报
回复
T-sql的while就可以实现for循环啊
13abyKnight 2013-03-25
  • 打赏
  • 举报
回复
非常感谢.......
szm341 2013-03-25
  • 打赏
  • 举报
回复
引用 3 楼 DevilKorHenn 的回复:
重点,SERVER FOR 循环不会使用。 我着个例子是单个数据库名字进行查询
用你写的改的游标嵌套

---------------创建表记录表记录
create table tableRecord
(
tableName varchar(50) not null,
countRecord int null,
identRecord int null
)
go

--这是动态读取数据库名称,根据数据库名称获取当前用户表名
create procedure getTableRecord
as
--清空数据
truncate table tableRecord
--定义临时表
declare @tables table(name varchar(50))

declare @databaseName varchar(200)
declare @tbName varchar(200)

declare cursor_database cursor for
select name from [sysdatabases] where crdate>=convert(varchar,getdate(),23) order by [name]
open cursor_database
fetch next from cursor_database into @databaseName
while @@fetch_status=0
begin
insert into @tables
exec('select name from '+@databaseName+'.sys.tables')
	declare cursor_tb cursor for
	select name from @tables order by [name]
	open cursor_tb
	fetch next from cursor_tb into @tbName
	while @@fetch_status=0
	begin
	insert into tableRecord
	exec('select '''+@tbName+''',count(*),ident_current('''+@databaseName+'.dbo.'+@tbName+''') from ['+@databaseName+'].dbo.['+@tbName+']')
	fetch next from cursor_tb into @tbName
	end
	close cursor_tb
	deallocate cursor_tb
fetch next from cursor_database into @databaseName
end
close cursor_database
deallocate cursor_database

13abyKnight 2013-03-25
  • 打赏
  • 举报
回复
重点,SERVER FOR 循环不会使用。 我着个例子是单个数据库名字进行查询

34,837

社区成员

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

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