日期:2014-05-17  浏览次数:20742 次

急:动态获取SQLserver2008数据库名称并且根据数据库名称获得当前库的表中数据集.
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

------解决方案--------------------
引用:
重点,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,ge