用Excel建立SQL Server数据字典和报表的脚本

这是一个很好的问题。解决这个问题最简单的方法是从扩展属性中获得值到物理表中,因此你可以很容易通过Microsoft Excel、报表服务或其它任何报表工具导出数据。

要启动这个过程,你需要配置下面列出的存储过程dbo.sp_get_extendedproperty。

[dbo].[sp_get_extendedproperty]
USE [master]
GO
CREATE PROCEDURE [dbo].[sp_get_extendedproperty]
@databasename varchar(128) = NULL
as
BEGIN
SET NOCOUNT ON
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
IF @databasename IS NULL
SET @databasename = db_name()
DECLARE @sqltext nvarchar(4000)
IF object_id(N'tempdb.dbo.##temp___DataDictionary') IS NOT NULL
DROP TABLE ##temp___DataDictionary
IF object_id(N'tempdb.dbo.##temp___DataDictionary_schema') IS NOT NULL
DROP TABLE ##temp___DataDictionary_schema
CREATE TABLE ##temp___DataDictionary(
[tableschema] varchar(128) NULL,
[tablename] varchar(128) NULL,
[columnname] varchar(128) NULL,
[xtype] varchar(8) NULL,
[description] nvarchar(4000) NULL
)
CREATE TABLE ##temp___DataDictionary_schema(
[tableschema] varchar(128),
[tablename] varchar(128) NULL,
)
-- Deploy Database Property
SET @sqltext = 'INSERT INTO ##temp___DataDictionary ([description], [xtype]) SELECT cast(value as nvarchar(4000)), ''D'' FROM '
+ @databasename + '.sys.fn_listextendedproperty(default, default, default, default, default, default, default)'
EXECUTE (@sqltext)
-- Get table level data dictionary
SET @sqltext = 'INSERT INTO ##temp___DataDictionary_schema SELECT DISTINCT TABLE_SCHEMA, TABLE_NAME FROM '
+ @databasename + '.INFORMATION_SCHEMA.TABLES'
EXECUTE(@sqltext)
DECLARE table_cursor CURSOR FOR
SELECT DISTINCT [tableschema] FROM ##temp___DataDictionary_schema
DECLARE @TABLE_SCHEMA VARCHAR(128)
OPEN table_cursor
FETCH NEXT FROM table_cursor INTO @TABLE_SCHEMA
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sqltext = 'INSERT INTO ##temp___DataDictionary ([tableschema], [tablename],[description], [xtype]) SELECT '
+ '''' + @TABLE_SCHEMA + '''' + + ', objname, cast(value as nvarchar(4000)), ''U'' FROM '
+ @databasename + '.sys.fn_listextendedproperty (NULL, ''schema'', '
+ '''' + @TABLE_SCHEMA + ''''+ ', ''table'', default, NULL, NULL)'
EXECUTE(@sqltext)
FETCH NEXT FROM table_cursor INTO @TABLE_SCHEMA
END
CLOSE table_cursor
DEALLOCATE table_cursor
CREATE TABLE ##temp___DataDictionary_keys(
[tableschema] varchar(128) NULL,
[tablename] varchar(128) NULL,
[columnname] varchar(128) NULL,
[xtype] varchar(8) NULL
)
-- Populate all the key types
SET @sqltext = 'INSERT INTO ##temp___DataDictionary_keys SELECT U.TABLE_SCHEMA,U.TABLE_NAME, U.COLUMN_NAME, xtype '
+ 'FROM ' + @databasename + '.INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE U '
+ 'JOIN ' + @databasename + '.sys.sysobjects O ON U.CONSTRAINT_NAME = O.name WHERE O.xtype in (''F'',''PK'')'
EXECUTE(@sqltext)
-- Get column level
DECLARE @TABLE_NAME varchar(128)
DECLARE column_cursor CURSOR FAST_FORWARD FOR
SELECT [tableschema], [tablename] FROM ##temp___DataDictionary_schema
OPEN column_cursor
FETCH NEXT FROM column_cursor INTO @TABLE_SCHEMA, @TABLE_NAME
WHILE @@FETCH_STATUS = 0
BEGIN
-- display all columns under MyTable
SET @sqltext = 'INSERT INTO ##temp___DataDictionary ([tableschema], [tablename],[columnname], [description]) SELECT '
+ '''' + @TABLE_SCHEMA + '''' + ','
+ '''' + @TABLE_NAME + '''' + ', objname, cast(value as nvarchar(4000))'
+ ' FROM ' + @databasename + '.sys.fn_listextendedproperty (NULL, ''schema'', '
+ '''' + @TABLE_SCHEMA + '''' + ', ''table'', '
+ '''' + @TABLE_NAME + '''' + ', ''column'', default)'
EXECUTE(@sqltext)
FETCH NEXT FROM column_cursor INTO @TABLE_SCHEMA, @TABLE_NAME
END
CLOSE column_cursor
DEALLOCATE column_cursor
UPDATE D
SET D.[xtype] = K.[xtype]
FROM ##temp___DataDictionary D JOIN ##temp___DataDictionary_keys K
ON D.tableschema = K.tableschema AND D.tablename = K.tablename AND D.columnname = K.columnname
SELECT @@servername as servername,@databasename as dbname,tableschema,tablename,columnname,[xtype],[description]
FROM ##temp___DataDictionary
ORDER BY @@servername ,dbname,tableschema,tablename,columnname,[xtype] asc
DROP TABLE ##temp___DataDictionary
DROP TABLE ##temp___DataDictionary_keys
END

时间: 2024-10-30 14:05:46

用Excel建立SQL Server数据字典和报表的脚本的相关文章

用扩展属性和第三方工具建立SQL Server数据字典

数据字典是一个数据模型中数据和对象的相关描述集合,它有利于程序员和用户在创建应用程序.报 告时查阅数据和对象.当用到数据模型时,创建一个数据字典是很理想的.当数据库很小时,开发人员 经常利用内嵌的SQL Server工具和脚本来创建数据模型.但是当数据库模型变成企业级的数据模型并且 具有相对应的复杂性时,管理和维护的复杂性也随之增加.所以可以用什么办法管理和创建这样的数据 模型呢?有没有什么可用的第三方工具呢? 迄今为止,大多数数据建模工具使用相同的方法存储数据 字典.一些工具可能使用不同的术语

excel-用ADO将Excel导入sql server 2008 报error# 3092错误

问题描述 用ADO将Excel导入sql server 2008 报error# 3092错误 我用ADO将一张excel表导入到sql server中去,代码如下: hr=m_pConnection->Open(_bstr_t("Provider=SQLOLEDB;server=TOUCH;Database=MR_NXT;Uid=touch0413;Pwd=LJm_1989915"),"","",adModeUnknown); m_pCo

visual studio-vs2015中有个建立sql server项目有什么用

问题描述 vs2015中有个建立sql server项目有什么用 vs2015默认装了sql server有什么用呢?用再装一个sql server么,vs2015装sql server哪种版本好呢? 解决方案 vs2015默认会安装sql server express.sql localdb和sql ce 开发来说,足够了. 解决方案二: 你想将数据保存到数据库就有用了

asp.net Excel转换为SQL Server的方法_实用技巧

1.功能分析 通过Microsoft.Jet.OLEDB.4.0方式可实现使用ADO.NET访问Excel的目的,如以下示例代码为连接Excel数据的字符串: 复制代码 代码如下: string strOdbcCon = @"Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=D:\2010年图书销售情况.xls;Extended Properties=Excel 8.0"; 2.实施方法 程

联系使用Excel和SQL server

这篇文章是基于两个软件的――SQL Server 和 Excel.这篇文章会帮助你了解如何将这两个软件天衣无缝地衔接起来,来进行数据的输出.通过这种方法,你所提供的报表和信息将帮助他们更有效地进行工作,并且可以减少用户们求助公司DBA的频率. 当今,许多公司都使用SQL Server来处理关于产品.服务和支持方面的数据――所有那些你能够想象得到的数据.通常,安装有SQL Server的公司都同时安装有非常庞大和贵重的软件应用程序,这些应用程序是用来从数据库中插入和查找数据用的.当这些应用程序能够

在IIS中为SQL Server 2008配置报表服务

不知道是不是SQL Server 2008的Bug,我在安装了SQL2008后(选择了安装报表服务的),但是在IIS中 根本没有报表服务的虚拟目录.只是这么一个问题,其他BI设计器.报表服务等都还算正常. 要正常使用报表服务则需要手动添加报表服务的虚拟目录,具体操作如下: (1)运行inetmgr打开IIS管理器. (2)新建应用程序池Report,使用默认配置即可,该应用程序池用于报表服务专用. (3)在默认网站中新建虚拟目录Reports,本地路径是C:\Program Files\Micr

SQL Server 2008中报表服务详解

一.导言 尽管公司经常采集和存储大量的数据,但是有时还是难以详尽地显示数据,而且也很难提供对商业中 将发生什么的洞察以使商业决策者为公司作出相应的和及时的决策. 为了能作出有效的商业决策,公司内从业务经理到信息工作人员的所有层级的用户需要能很容易的访 问到直接提供信息的综合了从企业内多个数据源获得的数据的报表.在大多数公司里,这些报表需要结合 详细的数字和基于文本的报表,这些报表提供了对公司活动的全面的说明和图形化的可视化,它帮助使得 可以更好的查看趋势和进行比较. 报表服务为公司提供了满足各种

使用扩展属性快速创建SQL Server数据字典

问题 我需要一个创建能够保持最新数据字典的方法.我对数据库做了很多更改,而我花费于数据 库文档更新的时间多于数据库管理的时间. 专家解答 如果你将元数据存储为扩展属性, 那么你可以使用SQL Server 2005在几秒之内为一个数据库创建一个数据字典.SQL Server 2005 AdventureWorks示例数据库包含了众多扩展属性,所以这个数据库是一个很好的示例.在这篇文章里, 我们将介绍两个核心内容.首先是一组脚本示例,它为表和字段添加扩展属性.其次是生成HTML格式数 据字典的T-

SQL Server 2008升级报表服务器数据库

报表服务器数据库可以为一个或多个报表服务器实例提供内部存储.因为报表服务器数据库架构可能会因为推出新的 Reporting Services 版本而有所变化,所以要求数据库版本与使用的报表服务器实例的版本相匹配.大多数情况下,报表服务器数据库可以自动升级,您不需要执行任何具体操作. 如何升级报表服务器数据库 以下列表指出了升级报表服务器数据库的所有情况: 安装程序升级报表服务器的单个实例.在服务启动并且报表服务器确定数据库架构版本与服务器版本不匹配之后,将自动升级数据库架构. 服务启动时,报表服