请输入您要查询的百科知识:

 

词条 Ms sql server
释义

MS SQL Server是一个全面的数据库平台,使用集成的商业智能 (BI) 工具提供了企业级的数据管理。MS SQL Server 数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序。 MS SQL Server数据引擎是本企业数据管理解决方案的核心。此外MS SQL Server结合了分析、报表、集成和通知功能。这使您的企业可以构建和部署经济有效的 BI 解决方案,帮助您的团队通过记分卡、Dashboard、Web services 和移动设备将数据应用推向业务的各个领域。

在现今数据世界里,公司要获得成功和不断发展,他们需要定位主要数据趋势愿景。微软的数据平台愿景将帮助公司满足数据爆炸和下一代数据驱动应用程序的需求。微软将继续投入和发展以下的关键领域来支持他们的数据平台愿景:关键任务企业数据平台、动态开发、关系数据和商业智能。

了解微软数据平台愿景

以及SQL Server 2008是如何满足下一代数据驱动应用程序的需求。

Microsoft数据平台愿景

许多因素致使产生信息存储爆炸。有了新的信息类型,例如图片和数字化视频,和从RFID标签获得的传感器信息,公司的数字信息数量在急剧增长。规范化和全球化的发展要求信息存储的安全性和随时可用性。同时,磁盘存储的成本显著地降低了,使得公司投资的每一美元可以存储更多的数据。用户必须快速的在大量的数据中找到相关的信息。此外,他们想在任何设备上使用这个信息,并且计划每天使用,例如Microsoft Office系统应用程序。对数据爆炸和用户期望值不断增加的管理为公司制造了许多挑战。

Microsoft® 数据平台愿景提供了一个解决方案来满足这些需求,这个解决方案就是公司可以存储和管理许多数据类型,包括XML、e-mail、时间/日历、文件、文档、地理等等,同时提供一个丰富的服务集合来进行数据交互作用:搜索、查询、数据分析、报表、数据整合,和强大的同步功能。用户可以访问从创建到存档于任何设备的信息,从桌面到移动设备的信息。

SQL Server 2008新功能

SQL Server 2008出现在微软数据平台愿景上是因为它使得公司可以运行他们最关键任务的应用程序,同时降低了管理数据基础设施成本和发送信息给所有用户的成本。这个平台有以下特点:

· 可信任的——使得公司可以以很高的安全性、可靠性和可扩展性来运行他们最关键任务的应用程序。

· 高效的——使得公司可以降低开发和管理他们的数据基础设施的时间和成本。

· 智能的——提供了一个全面的平台,可以在你的用户需要的时候给他发送观察和信息。

一、可信任的

在今天数据驱动的世界中,公司需要继续访问他们的数据。SQL Server 2008为关键任务应用程序提供了强大的安全特性、可靠性和可扩展性。

(一)保护你的信息

在过去的SQL Server 2005基础之上,SQL Server 2008做了以下方面的改进来增强和扩展它的安全性:

简单的数据加密

SQL Server 2008可以对整个数据库、数据文件和日志文件进行加密,而不需要改动应用程序。进行加密使公司可以满足遵守规范和极其关注数据隐私的要求。简单的数据加密的好处包括使用任何范围或模糊查询搜索加密的数据、加强数据安全性以防止未授权的用户访问、还有数据加密。这些可以在不改变已有的应用程序的情况下进行。

外键管理

SQL Server 2008为加密和密钥管理提供了一个全面的解决方案。为不断满足对数据中心信息的更强安全性需求,公司投资给供应商来管理公司内的安全密钥。SQL Server 2008通过支持第三方密钥管理和硬件安全模块(HSM)产品为这个需求提供了很好的支持。

增强了审查

使用SQL Server 2008可以审查你的数据操作,从而提高了遵从性和安全性。审查不只包括进行数据修改的所有信息,还包括关于什么时候对数据进行读取的信息。SQL Server 2008具有像服务器中加强的审查配置和管理这样的功能,这使得公司可以满足各种规范需求。SQL Server 2008还可以定义每一个数据库的审查规范,所以审查配置可以为每一个数据库作单独的制定。为指定对象作审查配置使审查的执行性能更好,配置的灵活性也更高。

(二)确保业务可持续性

有了SQL Server 2008,微软继续使公司具有提供简化了管理并具高可靠性的应用能力。

改进了数据库镜像

SQL Server 2008基于SQL Server 2005,提供了更可靠的加强了数据库镜像的平台。新的特性包括:

· 页面自动修复。SQL Server 2008通过请求获得一个从镜像合作机器上得到的出错页面的重新拷贝,使主要的和镜像的计算机可以透明的修复数据页面上的823和824错误。

· 提高了性能。SQL Server 2008压缩了输出的日志流,以便使数据库镜像所要求的网络带宽达到最小。

· 加强了可支持性

(1) SQL Server 2008包括了新增加的执行计数器,它使得可以更细粒度的对数据库管理系统(Database Management Syste,DBMS)日志记录的不同阶段所耗费的时间进行计时。

(2) SQL Server 2008包括动态管理视图(Dynamic Management View)和对现有的视图的扩展,以此来显示镜像会话的更多信息。

热添加CPU

为了在线添加内存资源而扩展SQL Server中的已有的支持,热添加CPU使数据库可以按需扩展。事实上,CPU资源可以添加到SQL Server 2008所在的硬件平台上而不需要停止应用程序。

(三)最佳的和可预测的系统性能

公司面对不断增长的压力,要提供可预计的响应和对随着用户数目增长而不断增长的数据量进行管理。SQL Server 2008提供了一个广泛的功能集合,使你数据平台上所有工作负载的执行都是可扩展的和可预测的。

性能数据的采集

性能调整和排除故障对于管理员来说是耗费时间的工作。为了给管理员提供全面的执行洞察力,SQL Server 2008推出了范围更大的数据采集,一个用于存储性能数据的新的集中的数据库,以及新的报表和监控工具。

扩展事件

SQL Server扩展事件是一个用于服务器系统的一般的事件处理系统。扩展事件基础设施是一个轻量级的机制,它支持对服务器运行过程中产生的事件的捕获、过滤和响应。这个对事件进行响应的能力使用户可以通过增加前后文关联数据,例如Transact SQL对所有事件调用堆栈或查询计划句柄,以此来快速的诊断运行时问题。事件捕获可以按几种不同的类型输出,包括Windows事件跟踪(Event Tracing for Windows,ETW)。当扩展事件输出到ETW时,操作系统和应用程序就可以关联了,这使得可以作更全面的系统跟踪。

备份压缩

保持在线进行基于磁盘备份是很昂贵而且很耗时的。有了SQL Server 2008备份压缩,需要的磁盘I/O 减少了,在线备份所需要的存储空间也减少了,而且备份的速度明显加快了。

数据压缩

改进的数据压缩使数据可以更有效的存储,并且降低了数据的存储要求。数据压缩还为大型的限制输入/输出的工作负载例如数据仓库提供了显著的性能改进。

资源监控器

SQL Server 2008随着资源监控器的推出使公司可以提供持续的和可预测的响应给终端用户。资源监控器使数据库管理员可以为不同的工作负载定义资源限制和优先权,这使得并发工作负载可以为终端用户提供稳定的性能。

稳定的计划

SQL Server 2008通过提供了一个新的制定查询计划的功能,从而提供了更好的查询执行稳定性和可预测性,使公司可以在硬件服务器更换、服务器升级和产品部署中提供稳定的查询计划。

二、高效的

SQL Server 2008降低了管理系统、.NET架构和Visual Studio® Team System的时间和成本,使得开发人员可以开发强大的下一代数据库应用程序。

(一)基于政策的管理

作为微软正在努力降低公司总成本所作工作的一部分,SQL Server 2008推出了陈述式管理架构(DMF),它是一个用于SQL Server数据库引擎的新的基于策略的管理框架。陈述式管理提供了以下优点:

· 遵从系统配置的政策

· 监控和防止通过创建不符合配置的政策来改变系统

· 通过简化管理工作来减少公司的总成本

· 使用SQL Server 管理套件查找遵从性问题

DMF是一个基于政策的用于管理一个或多个SQL Server 2008实例的系统。要使用DMF,SQL Server政策管理员使用SQL Server 管理套件创建政策,这些政策管理服务器上的实体,例如SQL Server的实例、数据库、和其它SQL Server对象。DMF由三个组件组成:政策管理、创建政策的政策管理员,和显式管理。管理员选择一个或多个要管理的对象,并显式检查这些对象是否遵守指定的政策,或显式地使这些对象遵守某个政策。

自动管理

政策管理员使用下面的执行模式之一,使政策自动执行:

· 强制——使用DDL触发器阻止违反政策的操作

· 对改动进行检查——当一个与某个政策相关的改动发生时,使用事件通知来评估这个政策

· 检查时间表——使用一个SQL Server Agent 工作定期的评估一个政策

(二)改进了安装

SQL Server 2008对SQL Server的服务生命周期提供了显著的改进,它重新设计了安装、建立和配置架构。这些改进将计算机上的各个安装与SQL Server 软件的配置分离开来,这使得公司和软件合作伙伴可以提供推荐的安装配置。

(三)加速开发过程

SQL Server提供了集成的开发环境和更高级的数据提取,使开发人员可以创建下一代数据应用程序,同时简化了对数据的访问。

ADO NET实体框架

在数据库开发人员中的一个趋势是定义高级的业务对象,或实体,然后他们可以将它们匹配到数据库中的表和字段,开发人员使用高级实体例如“客户”或“订单”来显示背后的数据。ADO NET 实体框架使开发人员可以以这样的实体来设计关系数据。在这一提取级别的设计是非常高效的,并使开发人员可以充分利用实体关系建模。

语言级集成查询能力

微软的语言级集成查询能力(LINQ)使开发人员可以通过使用管理程序语言例如C#或Visual Basic NET,而不是SQL语句来对数据进行查询。LINQ 使可以用.NET 框架语言编写的无缝和强大的面向集合的查询运行于ADO NET(LINQ到SQL),ADO NET 数据集(LINQ到数据集),ADO NET 实体框架(LINQ到实体),和到实体数据服务匹配供应商。SQL Server 2008提供了一个新的LINQ到SQL供应商,使得开发人员可以直接将LINQ用于SQL Server 2008的表和字段。

CLR集成和ADO NET对象服务

ADO NET 的对象服务层使得可以进行具体化检索、改变跟踪、和实现作为公共语言运行时(CLR)的数据的可持续性。开发人员使用ADO NET 实体框架可以通过使用由ADO NET 管理的CLR对象对数据库进行编程。SQL Server 2008提供了提高性能和简化开发过程的更有效的和最佳的支持。

Service Broker可扩展性

SQL Server 2008继续加强了Service Broker 的能力。

· 会话优先权——使你可以配置优先权,使得最重要的数据会第一个被发送和进行处理。

· 诊断工具——诊断工具提高了你开发、配置和管理使用了Service Broker的解决方案的能力,例如在应用程序部署之前诊断分支丢失情况或配置不正确的安全问题。

Transact-SQL的改进

SQL Server 2008通过几个关键的改进增强了Transact-SQL编程人员的开发体验。

· Table Value Parameters – 在许多客户的场景中,要传递一个表结构的值(行)的集合到服务器上的一个存储过程或函数中。这些值可能直接用于插入表或更新表,或者是用于更复杂的数据操作。值为表的参数为定义一个表类型和使应用程序创建、赋值和传递表结构的参数到存储过程和函数中提供了更简单的方式。

· 对象相关性——对象相关性的改进通过新推出的种类查看和动态管理功能使能够可靠的找出对象间的相关性。相关性信息总是关于绑定架构和未绑定架构的对象的最新的信息。这个相关性会跟踪存储过程、表、视图、函数、触发器、用户定义的类型、XML schema集合和其他对象。

· 日期/时间数据类型——SQL Server 2008推出了新的日期和时间数据类型:

(1) DATE——一个只包含日期的类型

(2) TIME——一个只包含时间的类型

(3) DATETIMEOFFSET – 一个可辨别时区的日期/时间类型,使用8到10个字节来存储带时区的日期时间

(4) DATETIME2 ——一个具有比现有的DATETIME类型更精确的秒和年范围的日期/时间类型,使用6到8个字节来存储精确到100纳秒的日期时间

新的数据类型使应用程序可以有单独的日期和时间类型,同时为用户定义的时间值的精度提供较大的数据范围。

(四)偶尔连接系统

有了移动设备和活动式工作人员,偶尔连接成为了一种工作方式。SQL Server 2008推出了一个统一的同步平台,使得在应用程序、数据存储和数据类型之间达到一致性同步。在与Visual Studio 的合作下,SQL Server 2008使得可以通过ADO NET中提供的新的同步服务和Visual Studio中的脱机设计器快速的创建偶尔连接系统。SQL Server 2008提供了支持,使得可以改变跟踪和使客户可以以最小的执行消耗进行功能强大的执行,以此来开发基于缓存的、基于同步的和基于通知的应用程序。

(五)不只是关系数据

应用程序正在结合使用越来越多的数据类型,而不仅仅是过去数据库所支持的那些。SQL Server 2008基于过去对非关系数据的强大支持,提供了新的数据类型使得开发人员和管理员可以有效的存储和管理非结构化数据,例如文档和图片。还增加了对管理高级地理数据的支持。除了新的数据类型,SQL Server 2008还提供了一系列对不同数据类型的服务,同时为数据平台提供了可靠性、安全性和易管理性。这篇白皮书的下一章节将介绍非关系数据存储的一些优点。

HIERARCHY ID

SQL Server 2008使数据库应用程序以比以前更有效的方式建立树结构。HierarchyId是一个新的系统类型,它可以存储一个层次树中显示的结点值。这个新的类型提供了一个灵活的编程模型。它作为一个CLR用户定义的类型(UDT)来执行,它提供了几种用于创建和操作层次结点的有效及有用的内置方法。

FILESTREAM数据

新的SQL Server 2008 FILESTREAM 数据类型使大型的二进制数据,像文档和图片等可以直接存储到一个NTFS文件系统中;文档和图片仍然是数据库的主要组成部分,并维护事务的一致性。

FILESTREAM 使传统的由数据库管理的大型二进制数据可以作为单独的文件存储在数据库之外,它们可以通过使用一个NTFS流API进行访问。使用NTFS流API使普通文件操作可以有效的执行,同时提供所有丰富的数据库服务,包括安全和备份。

集成的全文检索

集成的全文检索使得在全文检索和关系数据之间可以无缝的转换,同时使全文索引可以对大型文本字段进行高速的文本检索。

稀疏列

这个功能使NULL数据不占物理空间,从而提供了一个非常有效的管理数据库中的空数据的方法。例如,稀疏列使得一般包含极多要存储在一个SQL Server 2008数据库中的空值的对象模型不会占用很大的空间。稀疏列还允许管理员创建1024列以上的表。

大型的用户定义的类型

SQL Server 2008删除了对用户定义的类型的8,000字节的限制,使用户可以显著的扩大他们的UDT的规模。

地理信息

SQL Server 2008为在基于空间的应用程序中消耗、扩展和使用位置信息提供了广泛的空间支持。

· 地理数据类型

这个功能使你可以存储符合行业空间标准例如开放地理空间联盟(Open Geospatial Consortium,OGC)的平面的空间数据。这使得开发人员可以通过存储与设计的平面表面和自然的平面数据例如内部空间等相关联的多边形、点和线来实现“平面地球”解决方案。

· 几何数据类型

这个功能使你可以存储地理空间数据并对其执行操作。使用纬度和经度的组合来定义地球表面的区域,并结合了地理数据和行业标准椭圆体(例如用于全球GPS解决方案的WGS84)。

三、智能的

商业智能(BI)继续作为大多数公司投资的关键领域和对于公司所有层面的用户来说的一个无价的信息源。SQL Server 2008提供了一个全面的平台,用于当用户需要时你可以为其提供智能化。

(一)集成任何数据

公司继续投资于商业智能和数据仓库解决方案,以便从他们的数据中获取商业价值。SQL Server 2008提供了一个全面的和可扩展的数据仓库平台,它可以用一个单独的分析存储进行强大的分析,以满足成千上万的用户在几兆字节的数据中的需求。下面是SQL Server 2008中在数据仓库方面的一些优点。

数据压缩

数据仓库中的数据容量随着操作系统数目的快速增加而在持续增长。内嵌在SQL Server 2008中的数据压缩使得公司可以更有效的存储数据,同时还提高了性能,因为降低了I/O 要求。

备份压缩

保持一直在线做基于磁盘的备份是花费很昂贵的,并且很耗时。有了SQL Server 2008的备份压缩,保持在线备份所需的存储降低了,并且备份速度明显变快了,因为所需要的磁盘I/O 减少了。

分区表并行

分割使公司能够更有效的管理大型的、不断增长的数据表,只要简单的将它们分割为易管理的数据块。SQL Server 2008是在SQL Server 2005中的分割的优势之上建立的,它改进了对大型的分区表的操作性能。

星型联接查询优化器

SQL Server 2008为普通的数据仓库场景提供了改进的查询性能。星型联接查询优化器通过辨别数据仓库连接模式降低了查询响应时间。

资源监控器

SQL Server 2008随着资源监控器的推出,使公司可以给终端用户提供一致的和可预测的响应。资源监控器使公司可以为不同的工作负载定义资源限制和优先权,这使得并发工作负载可以提供稳定的性能。

分组设置

分组设置(GROUPING SETS)是对 GROUP BY 条件语句的扩展,它使得用户可以在同一个查询中定义多个分组。分组设置生成一个单独的结果集,这个结果集相当于对不同分组的行进行了UNION ALL 的操作,这使得聚合查询和报表更加简单和快速。

捕获变更数据

有了捕获变更数据,变更会被捕获并被放在变更表中。它捕获变更的完整内容,维护交叉表的一致性,甚至是对交叉的schema变更也起作用。这使得公司可以将最新的信息集成到数据仓库中。

MERGESQL语句

有了MERGE SQL 语句,开发人员可以更有效地处理数据仓库的场景,例如检查一行数据是否存在然后执行插入或更新。

可扩展的集成服务

集成服务的可扩展性方面的两个关键优势是:

· SQL Server集成服务 (SQL Server Integration Services,SSIS)管道改进

数据集成包现在可以更有效地扩展、使用有效的资源和管理最大的企业级的工作负载。这个新的设计将运行时间的可扩展性提高到多个处理器中。

· SSIS持久查找

执行查找是最常见的抽取、转换和加载(ETL)操作。这在数据仓库中尤为普遍,当实际记录必须使用查找来转换业务键到它们相应的替代中去时。SSIS 增强了查找的性能以支持大型表。

(二)发送相应的报表

SQL Server 2008提供了一个可扩展的商业智能基础设施,使得IT人员可以在整个公司内使用商业智能来管理报表以及任何规模和复杂度的分析。SQL Server 2008使公司可以有效的以用户想要的格式和他们的地址发送相应的、个人的报表给成千上万的用户。通过提供了交互发送用户需要的企业报表,获得报表服务的用户数目大大增加了。这使得用户可以获得对他们各自领域的洞察的相关信息的及时访问,使得他们可以作出更好、更快、更符合的决策。SQL Server 2008使得所有的用户可以通过下面的报表改进之处来制作、管理和使用报表:

企业报表引擎

有了简化的部署和配置,可以在企业内部更简单的发送报表。这使得用户能够轻松的创建和共享所有规模和复杂度的报表。

新的报表设计器

改进的报表设计器可以创建广泛的报表,使公司可以满足所有的报表需求。独特的显示能力使报表可以被设计为任何结构,同时增强的可视化进一步丰富了用户的体验。

此外,报表服务2008使商业用户可以在一个可以使用Microsoft Office的环境中编辑或更新现有的报表,不论这个报表最初是在哪里设计的,从而使公司能够从现有的报表中获得更多的价值。

强大的可视化

SQL Server 2008扩展了报表中可用的可视化组件。可视化工具例如地图、量表和图表等使得报表更加友好和易懂。

Microsoft Office渲染

SQL Server 2008提供了新的Microsoft Office渲染,使得用户可以从Word里直接访问报表。此外,现有的Excel® 渲染器被极大的增强了,它被用以支持像嵌套数据区域、子报表和合并单元格等功能。这使得用户可以维护显示保真度和改进Microsoft Office应用中所创建的报表的全面可用性。

Microsoft SharePoint® 集成

SQL Server 2008报表服务将Microsoft Office SharePoint Server 2007和Microsoft SharePoint Services 深度集成,提供了企业报表和其它商业洞察的集中发送和管理。这使得用户可以访问包含了与他们直接在商业门户中所做的决策相关的结构化和非结构化信息的报表。

(三)使用户获得全面的洞察力

及时访问准确信息,使用户快速对问题、甚至是非常复杂的问题作出反应,这是在线分析处理的前提(Online Analytical Processing,OLAP)。SQL Server 2008基于SQL Server 2005强大的OLAP能力,为所有用户提供了更快的查询速度。这个性能的提升使得公司可以执行具有许多维度和聚合的非常复杂的分析。这个执行速度与Microsoft Office的深度集成相结合,使SQL Server 2008可以让所有用户获得全面的洞察力。SQL Server分析服务具有下面的分析优势:

设计为可扩展的

SQL Server 2008加强了分析能力和提供了更复杂的计算和聚合,使得能进行的分析更宽广。新的立方体设计工具帮助用户将分析基础设施的开发工作流线化,使他们可以为优化性能建立解决方案。这个设计里内嵌了Best Practice Design Alerts,使得开发人员可以在设计时集成实时警告,这优化了设计。Dimension Designer使得可以简单的查看和编辑属性关系,还可以提供多个内置的对理想尺度设计的支持的验证,而在数据挖掘结构中增强的灵活性使得可以创建多个不同的模型,而不仅仅是过滤数据。

块计算

块计算提供了一个在处理性能方面的显著提高,使得用户可以增加他们的层级深度和计算的复杂度。

回写到MOLAP

SQL Server 2008分析服务中的新的基于MOLAP 的回写功能使得不再需要查询ROLAP 分区。这给用户提供了更强的用于分析应用程序中的回写设定,而不需要以OLAP 性能为代价。

资源监控器

在SQL Server 2008中一个新的资源监控器提供了对资源利用情况的详细观察。有了这个资源监控器,数据库管理员可以快速并轻松的监控和控制分析工作负载,包括识别哪个用户在运行什么查询和他们会运行多久,这使得管理员可以更好的优化服务器的使用。

预测分析

一个改进的时间序列算法扩大了预测能力。这个查询数据挖掘结构的能力使得报表可以很容易的包含从挖掘模型的外部得来的属性。新的交叉验证特性对数据进行多处对比,发送给你可靠的结果。这些数据挖掘的改进之处一起为更好的洞察和更丰富的信息提供了机会。

总结

SQL Server 2008提供了公司可依靠的技术和能力来接受不断发展的对于管理数据和给用户发送全面的洞察的挑战。具有在关键领域方面的显著的优势,SQL Server 2008是一个可信任的、高效的、智能的数据平台。SQL Server 2008是微软数据平台愿景中的一个主要部分,旨在满足目前和将来管理和使用数据的需求。

SQL Server 2008是一个重大的产品版本,它推出了许多新的特性和关键的改进,使得它成为至今为止的最强大和最全面的SQL Server版本。

本文章帮你充分认识SQLPLUS命令。

remark:告诉SQLPLUS接下来的文字是注释,不是命令。

set haedsep:标题分隔符标识一个告诉SQLPLUS将一个标题分为两行或更多行的字符。

ttitle:设置报表每一页的头标题。

btitle:设置报表每一页的尾标题。

column:给SQLPLUS各种关于列的标题、格式和处理的指令。

break on:告诉SQLPLUS在报表的各部分间插入空格,或者将小计和总计断开。

compute sum:令SQLPLUS计算小计。

set linesize:为报表的行设置最大字符数。

set pagesize:为页设置最大行数。

set newpage:设置页与页之间的空行数。

spool:将通常在屏幕上显示的报表移入一个文件,以便打印。

/**/ 在SQL项内标记一个注释的开头和结尾。类似于remark。

-- 在SQL项内标记联机注释所的开始。将该标记开始到本行末尾的一切内容都视为注释。类似于remark。

set pause:使屏幕显示在页与页之间停顿。

save:把正在建立的SQL查询保存到一个选中的文件中。

host:向主操作系统发送命令。

start或@:告诉SQLPLUS执行已经存储到文件中的指令。

edit:使你迅速离开SQLPLUS并进入所选择的编辑器。

define_editor:告诉SQLPLUS你所选择的编辑器的名字。

exit或quit:终止SQLPLUS。

Microsoft SQL Server之数据库存档

本文将为大家讲述如何注释自己的SQL Server,这些原理适用于所有的SQL Server版本,虽然SQL Server 2005及更高的版本包含了一些增强数据存档功能的巧妙设置。本文大部分涉及的原理也同样适用于其他的关系数据库,如Oracle、 MySQL、Microsoft Access和PostgreSQL等。

数据库命名规范

如果你是从头开始设计一个数据库,那遵循逻辑数据实体命名规范将是明智之举。下面为您提供在新数据库中给对象命名时会用到的一些建议。

一般命名规范

如果可以,数据库名称应当只使用文字和数据这两种字符。避免使用连字号,因为之后会给编写某些T-SQL查询命令造成困难。

如果可能,尽量避免在数据库实例中使用空格符,特别是为表和列命名时。虽然如果用方括号括起来的话,T-SQL还是可以辨认这些实体,不过在某些情况下也有可能导致混淆和代码错误。此外,还要尽量避免在表名和列名中使用T-SQL的保留词,例如month、year和user等。

表命名规范

当我们为表命名时,应当使用与该表存储的数据相关的名称。例如,存储企业员工数据的表可以命名为employees,注意这里使用的是名词的复数形式,因为一个表里很可能存储一个以上员工信息。

有一些程序开发人员会为表名附上像t_这样的前缀。如果这些表是引用了应用程序的源代码而来,那么这些前缀就非常有用,这样能够使软件开发团队一眼就看出来这是一个表,而不是一个视图或其他被引用的实体。

给表名附上与其功能相关的前缀(如StudentID_)可以帮助我们把表分门别类。SQL Server 2005引入了模式的概念,可以为表分类。例如StudentsEnrollments数据库中包含了StudentResources模式,而相关的表(StudentID、StudentAddress、StudentCredits等)就会在SQL Server 管理工作室表列中的这个模式下全部列出。

外键命名规范

如果能在一个数据表中识别出哪些是外键(foreign keys)会非常有用,所以在为外键命名的时候,可以添加一些类似于fk_的前缀,这样可以更直接的从表的字段中看出表的关系。

存储过程命名规范

根据用途来为存储过程命名是很有意义的。例如,GetUserID、InsertDateOfBirth、UpdateEnrollInfo等等,这样对于存储过程的用途就一目了然了。

有时候,可以适当添加后缀来表示存储过程的输入参数。例如GetUserIDByUserNameAndPassword这名称表示该存储过程会通过一个用户名和密码作为输入参数返回用户ID。这可以用来区分功能相似但参数设置不同的存储过程,还可以添加其他相关的存储过程,例如GetUserIDByGUID和GetUserIDByApplicantID。这种命名规范的缺陷就是存储过程的名字会变得很长。

一些开发人员会用特定的标签来为所有的存储程序添加前缀。其中很流行的做法是为存储程序名添加sp_前缀。不过,这里并不推荐这种做法,原因有二。首先,这对数据库性能有轻微的影响,因为SQL Server会先在主数据库中查找所有带有这个前缀的存储过程,虽然这会性能的影响很小,不过在高级和企业系统中,影响可能会放大。其次,由于微软在设计的时候也为系统的存储过程使用了这个前缀,所以始终存在着这种可能,那就是你为自己的存储过程起的名字和某个系统存储过程的名字相同。而且,SQL Server未来发布的版本中可能会引入一个新的系统存储过程,而这个过程与你现有的用户存储过程的名字相同。

如果你实在想要为自己的存储过程添加前缀,那么建议你使用usp_或sproc_这样的前缀。同样的,你可以为某个函数名加上func_这样的前缀,特别是在从应用程序源代码调用存储程序的时候非常有用,因为这让软件开发团队清楚的了解到这是在调用一个存储过程。

SQL存储过程的存档

千万不要忘记把存储过程和函数的T-SQL代码存档。由于简单的查询代码应该是自注释的,而存档将对大型的查询代码非常有用。而存储过程的标准化标头也非常有用,至少能够说明该存储过程的功能。如果手头上没有任何源控制系统,在标头中包括日志变化的内容还能够帮助我们追踪变化的发生。

数据库对象描述

能够对数据库对象进行描述在某种程度上意味着能够创建自我存档的数据库。

微软早在SQL Server 7.0就引入了一个有用的功能,就是通过表设计窗口为某个表添加描述(Description)。SQL Server 2000通过引入扩展属性(extended properties)加强了这一功能。然而,SQL Server 2000的企业管理器限制了允许属性编辑的功能。不过在 SQL Server 2005中的SQL Server管理工作室GUI允许对扩展属性进行编辑。数据库中的大部分对象(如表、列、视图、函数、存储过程和数据库本身)都具有可编辑的扩展属性。默认状态下,只有单一的扩展属性MS_Description。而且,虽然你可以利用MS_Description扩展属性来为对象添加描述,但如果没有第三方加载工具,就算添加了,用处也并不大。

经典短小码

(1).--功能概述:显示某一表的结构

DECLARE @tableName nvarchar(100)

SET @tableName ='brand'

--mssql2005

SELECT (

CASE WHEN a.colorder=1 THEN d name ELSE '' END)表名,

a.colorder 字段序号,

a name 字段名,

(CASE WHEN COLUMNPROPERTY( a id,a name,'IsIdentity')=1 THEN '√' ELSE '' END) 标识,

(CASE WHEN (

SELECT COUNT(*)

FROM sysobjects

WHERE (name IN

(SELECT name

FROM sysindexes

WHERE (id = a id) AND (indid IN

(SELECT indid

FROM sysindexkeys

WHERE (id = a id) AND (colid IN

(SELECT colid

FROM syscolumns

WHERE (id = a id) AND (name = a name))))))) AND

(xtype = 'PK'))>0 THEN '√' ELSE '' END) 主键,

b name 类型,

a.length 占用字节数,

COLUMNPROPERTY(a id,a name,'PRECISION') AS 长度,

ISNULL(COLUMNPROPERTY(a id,a name,'Scale'),0) AS 小数位数,

(CASE WHEN a.isnullable=1 THEN '√' ELSE '' END) 允许空,

ISNULL(e.text,'') 默认值,

ISNULL(g.[value],'') AS 字段说明

FROM syscolumns a

LEFT JOIN systypes b ON a.xtype=b.xusertype

INNER JOIN sysobjects d ON a id=d id AND d.xtype='U' AND d name <>'dtproperties'

LEFT JOIN syscomments e ON a.cdefault=e id

LEFT JOIN sys.extended_properties g ON a id=g.major_id AND a.colid = g.major_id

WHERE d name=@tableName

ORDER BY a id,a.colorder

(2).合并列值

原著:邹建

改编:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开) 2007-12-16 广东深圳

表结构,数据如下:

id value

----- ------

1 aa

1 bb

2 aaa

2 bbb

2 ccc

需要得到结果:

id values

------ -----------

1 aa,bb

2 aaa,bbb,ccc

即:group by id, 求 value 的和(字符串相加)

1. 旧的解决方法(在sql server 2000中只能用函数解决。)

--1. 创建处理函数

create table tb(id int, value varchar(10))

insert into tb values(1, 'aa')

insert into tb values(1, 'bb')

insert into tb values(2, 'aaa')

insert into tb values(2, 'bbb')

insert into tb values(2, 'ccc')

go

CREATE FUNCTION dbo.f_str(@id int)

RETURNS varchar(8000)

AS

BEGIN

DECLARE @r varchar(8000)

SET @r = ''

SELECT @r = @r + ',' + value FROM tb WHERE id=@id

RETURN STUFF(@r, 1, 1, '')

END

GO

-- 调用函数

SELECt id, value = dbo.f_str(id) FROM tb GROUP BY id

drop table tb

drop function dbo.f_str

/*

id value

----------- -----------

1 aa,bb

2 aaa,bbb,ccc

(所影响的行数为 2 行)

*/

--2、另外一种函数.

create table tb(id int, value varchar(10))

insert into tb values(1, 'aa')

insert into tb values(1, 'bb')

insert into tb values(2, 'aaa')

insert into tb values(2, 'bbb')

insert into tb values(2, 'ccc')

go

--创建一个合并的函数

create function f_hb(@id int)

returns varchar(8000)

as

begin

declare @str varchar(8000)

set @str = ''

select @str = @str + ',' + cast(value as varchar) from tb where id = @id

set @str = right(@str , len(@str) - 1)

return(@str)

End

go

--调用自定义函数得到结果:

select distinct id ,dbo.f_hb(id) as value from tb

drop table tb

drop function dbo.f_hb

/*

id value

----------- -----------

1 aa,bb

2 aaa,bbb,ccc

(所影响的行数为 2 行)

*/

2. 新的解决方法(在sql server 2005中用OUTER APPLY等解决。)

create table tb(id int, value varchar(10))

insert into tb values(1, 'aa')

insert into tb values(1, 'bb')

insert into tb values(2, 'aaa')

insert into tb values(2, 'bbb')

insert into tb values(2, 'ccc')

go

-- 查询处理

SELECT * FROM(SELECT DISTINCT id FROM tb)A OUTER APPLY(

SELECT [values]= STUFF(REPLACE(REPLACE(

(

SELECT value FROM tb N

WHERE id = A id

FOR XML AUTO

), ' <N value="', ','), '"/>', ''), 1, 1, '')

)N

drop table tb

/*

id values

----------- -----------

1 aa,bb

2 aaa,bbb,ccc

(2 行受影响)

*/

--SQL2005中的方法2

create table tb(id int, value varchar(10))

insert into tb values(1, 'aa')

insert into tb values(1, 'bb')

insert into tb values(2, 'aaa')

insert into tb values(2, 'bbb')

insert into tb values(2, 'ccc')

go

select id, [values]=stuff((select ','+[value] from tb t where id=tb id for xml path('')), 1, 1, '')

from tb

group by id

/*

id values

----------- --------------------

1 aa,bb

2 aaa,bbb,ccc

(2 row(s) affected)

*/

drop table tb

(3).--bom结构,查找节点下所有子节点:

create table os(id int,parentid int,desn varchar(10))

insert into os select 1,0,'体育用品'

insert into os select 2,0,'户外运动'

insert into os select 3,1,'篮球'

insert into os select 4,1,'足球'

insert into os select 5,2,'帐篷'

insert into os select 6,2,'登山鞋'

insert into os select 7,0,'男士用品'

insert into os select 8,7,'刮胡刀'

insert into os select 9,3,'大号篮球'

--求个节点下所有子节点:

create function f_cid(@id int)

returns varchar(500)

as

begin

declare @t table(id int,parentid int,desn varchar(10),lev int)

declare @lev int

set @lev=1

insert into @t select *,@lev from os where id=@id

while(@@rowcount>0)

begin

set @lev=@lev+1

insert into @t select a.*,@lev from os a,@t b

where a.parentid=b id and b.lev=@lev-1

end

declare @cids varchar(500)

select @cids=isnull(@cids+',','')+ltrim(id) from @t order by lev

return @cids

end

go

--调用函数

select *,ids=dbo.f_cid(id) from os

--得到每个节点路径:

create proc wsp2

@id int

as

select *,cast(' ' as varchar(10)) fullpath into #os from os

DECLARE @i int,@j int

set @i=0

set @j=1

select @i=max(parentid) from #os

update #os set fullpath=id

while @j<=@i

begin

update #os set fullpath=a.fullpath+','+ltrim(#os id)

from #os inner join #os a on #os.parentid=a id

where #os.parentid=@j

set @j=@j+1

end

select * from #os

go

--调用存储过程

exec wsp2 1

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2024/12/23 10:49:05