当前位置: 首页 > news >正文

网站设计论文引言php网站开发零基础教程

网站设计论文引言,php网站开发零基础教程,线上推广员是干什么的,想开广告图文店在哪学注#xff1a;原文作者不知道是谁#xff0c;先收藏了这篇#xff08;若有侵权#xff0c;请留言#xff0c;删除#xff09; EBS - External Blob Storage 外部大二进制对象存储 RBS - Remote Blob Storage 远程大二进制对象存储 这俩概念据我所知#xff0c;…注原文作者不知道是谁先收藏了这篇若有侵权请留言删除 EBS - External Blob Storage 外部大二进制对象存储 RBS - Remote Blob Storage 远程大二进制对象存储 这俩概念据我所知SharePoint领域应用比较广泛如果你对SharePoint存储结构比较熟悉的话应该比较好理解简单的说SharePoint算是一种Web应用程序我们能够通过网页上传或者管理数据比如文档照片视频音频等这些文件的实际载体是数据库一般就是微软的SQL Server在数据库表中这些文件以二进制对象(文件流一样的东西)存储在某一个字段中。随着数据量增大数据库体积会越来越庞大最后影响数据库的性能和运营成本所以人们开始试图将数据库中的文件流取出来存储到文件系统例如本地磁盘上在SharePoint 2007的时候EBS诞生了SharePoint提供了类似于一个接口供开发人员实现可以让SharePoint能够识别存储到其他位置的数据非SQL Server。到了SharePoint 2010的时代数据库版本已经更新了很多貌似是从SQL Server 08 SP2版本开始的具体版本记不清了数据库本身支持了一种文件的外部存储技术本质上RBS是SQL Server 2008的API并且使用了SQL Server 2008中的新的FILESTREAM功能。相当于数据库的接口。所以区别也就比较明显了。可能说的不太对大体上是这么个意思。 MOSS -》RBS  API -》FileStream API FileStream均由sql server 实现 如果使用SharePoint 2007作为文档管理平台它很让人诟病的一点就是SharePoint 2007是将文件本身直接存储在SQL Server数据库(WSS_CONTENT.alldoc/doctostream.docstream)之中。虽然Windows SharePoint Services 3.0 SP1增加了一个External BLOB Storage(EBS)接口但是微软并没有提供实现而是需要开发人员自己来实现它。 SharePoint 2010仍然对EBS提供兼容但并不推荐使用EBS推荐的解决方案乃是使用SQL Server 2008 Remote BLOB Storage(RBS)。 SQL RBS是一组API通过RBS一个SQL Server 2008数据库就不再需要将大二进制数据(BLOB)存储在数据库内部而是可以存储到外面的某个地方在数据库里面可能只会存储一个对外部BLOB数据的引用。SQL Server 2008和SQL Server 2008 R2都支持RBS。  听起来RBS实在是一个很好的东东。但是(总是有但是)RBS仅仅是一组API换句话说RBS可以让开发人员利用这组API开发出一个RBS Provider真正实现对BLOB数据的存取。如果没有RBS ProviderRBS自己可不会自动的将BLOB存储到某个指定的地方去。不同的RBS Provider可以让我们将BLOB存储到文件系统、磁盘存储设备、文件服务器等等各种地方反正不继续放到SQL Server数据库里面就对了。    在你对RBS有了初步认识之后我们接着介绍SQL Server 2008里面的另外一个新特性FILESTREAM。下面这句话摘自SQL Server 2008联机丛书“通过将 varbinary(max) 二进制大型对象 (BLOB) 数据以文件形式存储在文件系统上FILESTREAM 使 SQL Server 数据库引擎和 NTFS 文件系统成为了一个整体。”所以FILESTREAM可以让管理员选择将SQL Server数据库里面的varbinary(max)类型BLOB数据存储到本地NTFS文件系统上。在通过FILESTREAM对BLOB数据进行存取的时候还能顺便能够享受到数据库事务处理的好处。  听起来FILESTREAM和RBS很相似是不是但其实RBS和FILESTREAM是两个不同的东东它们互不依赖。RBS是一组API接口通过这组API应用程序就能将BLOB数据存储到数据库之外的某个地方具体实现由开发人员创建的RBS Provider来完成。FILESTREAM是SQL Server 2008内置的一个特性它能将原本存储在数据库里面的BLOB数据存储到服务器本地的NTFS文件系统上。 SharePoint 2010所利用的是RBS API而并非FILESTREAM特性。所以如果没有一个RBS Provider我们并不能马上就将SharePoint 2010里面存储的文件存储到数据库之外的某个地方去。但是既然FILESTREAM特性已经拥有了现成的将数据库中的BLOB数据存储到NTFS文件系统上的能力为什么不能直接使用FILESTREAM做一个RBS FILESTREAM Provider也就是利用FILESTREAM的功能实现的一个RBS Provider呢这样岂不是就能将SharePoint 2010中的文件都存储到NTFS文件系统上了吗  微软也想到了所以微软以特性包(Feature Pack)的形式提供了一个RBS FILESTREAM Provider。你可以从这里下载x64版本的RBS FILESTREAM Provider。但是要在SharePoint 2010系统上安装并使用它也是需要按照一定的步骤来操作的。下面就是具体的操作步骤。 1、确定SQL Server 2008已经启用了FILESTREAM  在安装SQL Server 2008时会有一个步骤提示是否安装FILESTREAM。如果你不确定是否安装了此特性从SQL Server 2008服务器上打开SQL Server配置管理器从左边选中SQL Server 服务然后从右边的窗格中用鼠标右键点击运行的SQL Server实例选择属性菜单项。    在打开的属性窗口中选择FILESTREAM选项卡然后选中启用FILESTREAM的选择框点击确定按钮。    打开SQL Server Management Studio选中左侧的SQL Server实例然后点击工具栏区域的新建查询打开一个查询界面然后在里面输入下面的SQL语句并执行。  EXEC sp_configure filestream_access_level, 2  RECONFIGURE  2、确定要应用RBS FILESTREAM Provider的内容数据库  由于RBS是基于数据库为单元来启用的所以你可以选择在哪些SharePoint内容数据库上启用RBS。这意味着对于SharePoint服务器场里面那些存储文件数量并不多的内容数据库可能并没有必要为它启用RBS而那些可能会存储大量文件的内容数据库则可以启用RBS有效的优化它们。  SharePoint 2010系统中内容数据库与网站的关系是  ● 一个Web应用程序可以使用一个或多个内容数据库  ● 在新建Web应用程序时会为其自动创建一个内容数据库管理员可以稍后为此Web应用程序创建更多的内容数据库  ● 在Web应用程序中创建一个网站集时这个网站集会被存储到Web应用程序的某个内容数据库中  ● 一个网站集(包括其所包含的首要网站和所有子网站)只能被存储在一个内容数据库中而不能被分拆存储到多个内容数据库中。  管理员可以打开SharePoint 2010管理中心的内容数据库管理界面查看每个Web应用程序所使用的内容数据库或是为某个Web应用程序添加新的内容数据库。   在下面的示范操作中我们就为上图中所示的这个名为WSS_Content的内容数据库启用RBS。 3、配置内容数据库  在确定了要启用RBS的内容数据库之后打开SQL Server 2008 Management Studio找到这个内容数据库用鼠标右键点击并选择新建查询菜单项。    在打开的查询窗口中输入下面这些SQL语句并执行。  use [WSS_Content]  if not exists (select * from sys.symmetric_keys where name   N##MS_DatabaseMasterKey##) create master key encryption by password   NAdmin Key Password !2#4 use [WSS_Content]  if not exists (select groupname from sysfilegroups where  groupnameNRBSFilestreamProvider) alter database [WSS_Content]  add filegroup RBSFilestreamProvider contains filestream use [WSS_Content]  alter database [WSS_Content] add file (name RBSFilestreamFile,  filename c:\blobstore) to filegroup RBSFilestreamProvider  在上面这些SQL指令中标记为蓝色的是你在复制了这些指令后需要按照你的环境中的实际情况需要修改的部分。WSS_Content需要修改为你要启用RBS的内容数据库的实际名称。c:\blobstore要修改成你希望用来存放BLOB文件的文件夹路径。从实践角度出发你需要选择一个位于非系统分区、剩余空间大、速度快、稳定可靠的文件夹。注意这个文件夹只能是一个本地路径而不能是网络路径因为FILESTREAM不支持远程NTFS文件夹也就是说这个文件夹是处于 数据库 所在的服务器上的。另外这个文件夹也不要事先建立好上面的SQL指令会自动帮你将这个文件夹创建出来。    上述SQL语句执行完毕之后可以打开资源管理器确认在SQL Server服务器上相应的文件夹已经创建成功。 4、安装RBS FILESTREAM Provider  将下载到的RBS_x64.msi文件复制到SharePoint服务器场中的每一台服务器上所有的SQL Server数据库服务器和SharePoint服务器上都必须安装此RBS Provider。  先在SQL Server数据库上和SharePoint服务器上(如果服务器场中有多台SharePoint服务器则在一台Web前端服务器上)安装RBS FILESTREAM Provider安装步骤如下。  以管理员身份运行命令提示符。    在命令提示符窗口中使用cd指令将当前路径设置为RBS_x64.msi所在的文件夹然后输入下面这行指令并执行  msiexec /qn /lvx* rbs_install_log.txt /i RBS_X64.msi TRUSTSERVERCERTIFICATEtrue FILEGROUPPRIMARY DBNAMEWSS_Content DBINSTANCEsp2010 FILESTREAMFILEGROUPRBSFilestreamProvider FILESTREAMSTORENAMEFilestreamProvider_1  上面指令中用蓝色标注的部分是需要按照你的环境中的实际情况进行修改的部分。WSS_Content需要修改为需要启用RBS的内容数据库sp2010需要修改为实际的SQL Server 2008实例名称(如果在安装SQL Server 2008时你没有使用默认实例名称那么它的值可能类似sp2010\express这样的格式)。对每个内容数据库都只应该使用msiexec.exe执行一次这条指令。    在你敲入了上面这行很长的指令并敲下回车之后命令提示符窗口看起来会立即执行完成但实际上后台会继续执行RBS Provider的安装程序。你可以打开Windows任务管理器应该会看到有好几个msiexec.exe进程在执行中。过上一会儿任务管理器中就不会再显示有几个msiexec.exe在运行(在我的环境中仍会剩下一个另外的msiexec.exe进程)这表明RBS Provider安装过程已经完成。   在RBS Provider安装过程中它会将log信息写入与RBS_x64.msi安装文件同目录的rbs_install_log.exe文件。从资源管理器中打开这个log文件搜索其中是否有如下Installation completed successfully之类的信息这些信息表示RBS_x64.msi的安装是成功的。    如果在你的SharePoint服务器场中只有一台SharePoint服务器那么按照上面的描述在它上面安装完RBS FILESTRREAM Provider就完事了。但是如果服务器场中存在多台SharePoint服务器那么就需要继续在其他的Web前端服务器和应用服务器上安装RBS FILESTREAM Provider不过命令提示符里面的指令需要换成  msiexec /qn /lvx* rbs_install_log.txt /i RBS_X64.msi DBNAMEWSS_Content DBINSTANCEsp2010 ADDLOCALClient,Docs,Maintainer,ServerScript,FilestreamClient,FilestreamServer  在RBS FILESTREAM Provider安装到所有服务器上之后打开SQL Server 2008 Management Studio刷新内容数据库的Table列表应该会看到多出来许多名称以mssqlrbs开头的与RBS有关的Table。如果在查询窗口中执行下面的SQL语句也应该能查询出一些结果。  select * from dbo.sysobjects where name like rbs%    如果在内容数据库中并没有上面这些Table运行上面的SQL语句也查询不出任何结果那么表明RBS Provider并没有正确安装到内容数据库上。如果真是这样在每台服务器上打开资源管理器双击RBS_x64.msi然后在出现的安装界面中使用卸载选项先将RBS Provider卸载掉然后再按照上面的步骤重新在命令提示符窗口中尝试安装它。 5、为内容数据库启用RBS FILESTREAM Provider  终于到了最后一个步骤。在SharePoint服务器上打开SharePoint 2010 Management Shell这是一个基于Windows Powershell的命令行管理工具。    在SharePoint 2010 Management Shell中依次执行下面的指令  (1) $cdb Get-SPContentDatabase WSS_Content  获取到指定的内容数据库(SPContentDatabase)对象实例绿色所标注的WSS_Content需要更换成在你的环境中实际的内容数据库名称。  (2) $rbss $cdb.RemoteBlobStorageSettings  获取内容数据库的RBS设置(SPRemoteBlobStorageSettings)对象实例。  (3) $rbss.Installed()  检查在内容数据库上是否安装了RBS如果需要更新相应的属性值。  (4) $rbss.Enable()  在内容数据库上启用RBS。  (5) $pvdName $rbss.GetProviderNames()[0]  获取第一个注册到内容数据库上的RBS Provider的名称。  (6) $rbss.SetActiveProviderName($pvdName)  为内容数据库设置要激活的RBS Provider。    然后你可以执行$rbss来查看它的一些属性值如果设置正确它输出的内容应该如上图所示。  如果你启用RBS FILESTREAM Provider的内容数据库中已经存储了一个网站集那么在你启用了RBS Provider之后网站集里面的文档并不会自动的马上通过FILESTREAM转存到NTFS文件系统上。只有新增的文档才会被存储到NTFS文件系统上网站集里面之前上载的文档仍然会保存在内容数据库里面。如果你希望现在将那些旧的文档统统转存到我们所指定的NTFS文件系统中那么可以继续在SharePoint 2010 Management Shell中执行下面这个指令  (7) $rbss.Migrate()  如果你希望设置一个文档大小阈值只有大小超过此阈值的文档才通过RBS FILESTREAM Provider存储到NTFS文件系统上而小于此阈值的文档仍然存储在内容数据库中那么可以在SharePoint 2010 Management Shell中继续执行下面的指令(假设阈值是1048000字节也就是1M)  (8) $rbss.MinimumBlobStorageSize 1048000  (9) $rbss.Update()  上面的这些指令都是针对一个内容数据库的。如果你有多个内容数据库要启用RBS那么就对每个内容数据库都执行一遍上述指令。 6、检查最终效果  在完成了上述所有操作步骤之后在SharePoint网站中上载一些文档然后检查你所设定的NTFS文件夹里面应该会包含有一些子文件夹存储着这些文档。 WSS和MOSS的区别 Microsoft Office SharePoint Service 2007 是微软最新的企业协作应用和开发平台。简称MOSSMOSS基于Window SharePonit Service 3.0开发简称WSS。MOSS是收费的WSS是免费的只要拥有了Window Server2003的许可就可以免费安装WSS。 WSS拥有站点列表文档库文档管理web part集群部署站点内搜索基于WF的工作流等功能。MOSS扩展实现了增强的文档管理企业搜索扩展了工作流引入了web内容管理Form Service Excel Service个人站点等。 以下章节若没有特别强调则所有内容都适合WSS和MOSS的。所有适合WSS的内容也一定适合MOSS反之则不然 WSS对IIS的扩展 WSS基于标准的asp.net 2.0开发 这是WSS开发中要始终记住的一点. 要精通WSS开发一定要精通asp.net。 每次新建一个WSS站点IIS中会同样新建一个网站我们称这个网站是被WSS扩展后的网站。那么扩展后发生了什么呢 首先IIS站点的所有文件的处理都被影射为需要asp.net运行引擎处理而标准的IIS站点只有asp.net本身的文件如aspxasmx等才需要运行引擎处理的其他文件由IIS直接输出到客户端。 查看一下站点下的web.config文件我们看到有这么一项配置 httpHandlers removeverbGET,HEAD,POSTpath* / addverbGET,HEAD,POSTpath*typeMicrosoft.SharePoint.ApplicationRuntime.SPHttpHandler, Microsoft.SharePoint, Version12.0.0.0, Cultureneutral, PublicKeyToken71e9bce111e9429c / addverbOPTIONS,PROPFIND,PUT,LOCK,UNLOCK,MOVE,COPY,GETLIB,PROPPATCH,MKCOL,DELETE,(GETSOURCE),(HEADSOURCE),(POSTSOURCE)path*typeMicrosoft.SharePoint.ApplicationRuntime.SPHttpHandler, Microsoft.SharePoint, Version12.0.0.0, Cultureneutral, PublicKeyToken71e9bce111e9429c / /httpHandlers HttpHandler是asp.net的一个扩展机制通过实现一个HttpHandler可以来直接针对较低层的RequestResponse编程WSS通过实现自己的HttpHandler实现对客户端所有请求文件的处理并且通过扩展Http请求扩展OPTIONS,PROPFIND,PUT,LOCK,UNLOCK,MOVE,COPY等动作实现文档的在线编辑在线编辑的实现原理可参考这篇文章http://www.cnblogs.com/jianyi0115/archive/2007/07/15/818566.html 注意httpModules节点下的这项配置 addnameSPRequesttypeMicrosoft.SharePoint.ApplicationRuntime.SPRequestModule, Microsoft.SharePoint, Version12.0.0.0, Cultureneutral, PublicKeyToken71e9bce111e9429c / HttpModule也是asp.net的扩展机制通过实现一个HttpModule可以切入Http请求的某个阶段做出相应的处理如身份校验初始化一些通用模块等。 WSS通过实现SPRequestModule切入Http请求进行一些需要的处理。最重要的是WSS通过SPRequestModule引入了SPVirtualPathProvider。SPRequestModule的OnInit方法中有这个关键的一句: SPVirtualPathProvider provider2 new SPVirtualPathProvider(); HostingEnvironment.RegisterVirtualPathProvider(provider2); VirtualPathProvider也是asp.net的扩展机制通过实现VirtualPathProvider可以控制asp.net页面的提供机制默认的VirtualPathProvider的实现直接访问服务器硬盘上的文件。WSS通过SPVirtualPathProvider实现了自己的页面Provider机制—WSS站点的页面是由文件系统和数据库联合存储的。 新建一个WSS站点后它的所有的文件都是放在硬盘上我们通过SharePonit Designer打开一个WSS站点可以看到完整的目录结构这些文件实际上全部都影射到文件系统上的某个文件,这个功能叫做ghost。当我们通过SPD修改了某个文件之后,WSS会把这个修改的文件保存到数据库,这个文件跟原始的文件系统上的文件就脱离关联了,这叫做unghost.通过ghost,WSS做到了是不同的站点可以共享相同的文件,通过unghost,WSS又实现了一个站点对页面的修改不会影响到其他站点. WSS的一些概念 1)       Farm -- 服务器场 服务器场是WSS最大的一个概念,整个WSS的所有服务器,包括前端服务器,数据服务器,组成了服务器场,一个服务器场有一个配置数据库,多个内容数据库,多个应用程序.. 2)       Application -- 应用程序 应用程序对应IIS的一个站点,它是一个安全和程序文件的独立主体。即一个应用程序可以有自己的用户身份认证机制,有自己独立的一套运行程序文件,一个应用程序会映射到硬盘上的一个独立的目录,一般为C:InetpubwwwrootwssVirtualDirectories里面的某个目录.一个应用程序下可以有多个站点集. 3)       Site Collection -- 站点集 站点集是一个虚拟的单元,在内容,用户和权限上是独立的. 一个站点集可以有多个子站点. 4)       Web -- 站点 站点内容和权限的组织单元.一个站点可以有多个子站点多个列表,文档库,多个页面.站点可以有独立的权限.站点可以有子站点,站点和子站点组成树型关系.子站点的权限默认集成于父站点. 5)       List-列表和文档库 列表可以理解成一个数据库表用来存储一些业务数据。一个列表有很多字段。 WSS3.0的列表可以存放多个内容类型。 6)       ConentType--内容类型 内容类型可以理解成数据实体如用户联系人日程数据等。一个内容类型包含很多字段。 7)       Field-字段 可以理解成数据库的字段Field是WSS整个架构的最底层元素。 WSS的对象模型        WSS开发很大一部分工作是需要调用各种WSS中的对象来实现的.常用的对象都放在Microsoft.SharePont这个dll中.我们通常的开发都要从站点集对象开始. Using(SPSite site new SPSite(“http://site-name/”)) { … }                 SPSite和SPWeb对象都是需要释放资源的,如果我们自己构造这两个对象,一定要在代码执行完毕时调用Dispose方法,来释放资源. 如果我们的代码处于WSS的运行环境之下,即代码直接运行在WSS的页面上,那么我们可以直接从WSS的上下文中获取到相关对象. SPSIte site SPContext.Current.Site; SPWeb web SPContext.Current.Web;   SPUser user SPContext.Current.Web.CurrentUser;     上下文对象提供了更好的性能(不需要重复创建对象),并且直接跟当前用户的身份挂钩.上下文对象由运行环境进行资源管理,不需要我们用代码来Dispose. MOSS2007构建与WSS V3之上并在其之上加了很多的企业级应用其关系如下图所示 原文摘自http://blog.csdn.net/figerdeng/archive/2010/04/26/5532029.aspx posted 2010-12-20 16:07 Alvin_jstu 阅读(71) | 评论(0) | 编辑 2010年11月25日 SQL SERVER 2005数据库总结 /* /* 数据库总结 --查询是操作中的重点及精华部分由于业务的多样性导致查询方案的多样性但是已有的关系必须通过各种手段在查询中予以表达 --常见查询手段 /* 1.普通查询 select 结果集列表表达式 from 值域范围 where 结果集筛选表达式 group by 统计结果集分组条件表达式 order by 结果集排序条件表达式 2.子查询(在查询内部嵌套其它辅助查询的定义例如其它查询作为计算列、值域、条件等) 3.联合查询(表联接join table) inner join内联接----重点后续的外联接只在特殊数据情况下使用 left outer join左外联接 right outer join右外联接 full outer join全外联接 4.SQL编程查询通过编写具有执行逻辑的多行代码来获取希望得到的查询结果或操作结果 4.1---View视图 4.2---UDF(User Defined Function)用户定义函数 4.3---SP(Stored Procedure)存储过程 4.4---Trigger触发器 4.5---Cursor游标 4.6---Transaction事务 */ --------------------------------------------------------------------- 常见的基本语句 select 字段 from 表名 where 条件 insert into 表名(字段) values(内容) update 表名  set 字段新内容 where 条件 drop from 表名 truncate table 表名--整表清空不写日志速度极快但很危险 --我们通常通过主键来删除内容 --------------------------------------------------------------------- 对表格进行处理 1.创建表格 create table 表名 create table ProdutPriceAndStock--表与表之间的1对1关系 ( productid int not null primary key foreign key references Product(productid), --产品标示号既当主键有当外键体现了一对一的关系 price money not null, productcount  int not null--产品当前库存数量 ) 2.删除表格 drop table 表名 3.增加表格字段列 alter table 表名 add 字段列名 字段类型 4.删除表格字段列 alter table 表名 drop column 列名 5.修改表格字段列属性 alter table 列名 alter column 列名 字段属性 约束 6.删除表格字段列约束 alter table 表名 drop constraint  约束名 7.修改表格字段列约束 alter table 表名 alter column 列名 字段属性 约束 default 0 for 列名 --------------------------------------------------------------------- 程序段编程 --程序三要素定义数据容器、赋值、使用 begin--程序段的开始 -----------定义 --declare 局部变量名称 数据类型 --特殊定义 --表数据类型 declare infotable table ( username nvarchar(20), userpwd nvarchar(50) ) -----------赋值 set num5 ---使用常量来赋值 set num(select count(accountid) from AccountInfo)---使用子查询来赋值 select num30,strhello,isgood1,onecharX--同时对多个数据容器赋值往往针对表中不同字段来赋值 --针对表类型的变量必须使用操作表数据的语句来赋值 -----------使用 --在服务器端的控制台中输出笑话ijiyunxing是无人可以看到作为重要的调试手段 --通过简单程序来完成运算及简单的业务逻辑 --大兔3元每只小兔一元三只百元买白兔 begin declare bigcount int,smallcount int declare infotable table ( 大兔数量 int, 小兔数量 int ) set bigcount1 set smallcount100-bigcount while(bigcount100) begin if((bigcount*3smallcount/3)100) begin print 祝贺你找到答案了 print 大兔Convert(nvarchar(10),bigcount)只 print 小兔Convert(nvarchar(10),smallcount)只 insert into infotable(大兔数量,小兔数量) values(bigcount,smallcount) break--跳出循环 end else begin print bigcountConvert(nvarchar(20),bigcount),非答案 end set bigcountbigcount1 set smallcount100-bigcount end select * from infotable end go --------------------------------------------------------------------- 建立视图 目的创建视图其主要目的是为了查询使用 create view  视图名 as select ......... 单表视图 多表视图---主要考查表的链接 inner join内联接----重点后续的外联接只在特殊数据情况下使用 left outer join左外联接 right outer join右外联接 full outer join全外联接 --交叉联接 select * from Category as c cross join Product as p go --内连接inner join----on寻找有效地数据对应项 select * from Category as c, Product as p where c.categoryidp.p_c_id go -- select categoryname as 分类名称 ,count(productid) as 分类数量 from Category as c ,Product as p where c.categoryidp.p_c_id group by categoryname go select * from Category as c --full outer全外联接 --left outer左 --right outer右 join Product as p on c.categoryidp.p_c_id go --------------------------------------------------------------------- --UDF user defined function 用户自定义函数 --UDF--标量函数内嵌表值函数多语句标志函数 --可以接受参数完成各种常见的查询任务根据任务结果的不同性质来合理选用不同的函数方式 --标量函数查询结果为独立的标量值例如数字。文字 --我们希望了解任何一个商品分类的目前产品数量 --可变量产品分类名称 --查询目标产品数量---int--标量------------------FN create function QueryProductCountByCategory---函数名 (Categoryname nvarchar(10))---形参字段 returns int-----返回值 with encryption---加密 as begin declare count int --返回变量值 declare categoryid nvarchar(15) set categoryid(select categoryid from Category where categorynamecategoryname) if(categoryid is null)     begin set count-1--利用无效的返回值来表示参数有误 end else begin set count(select count(productid)from Product where p_c_idcategoryid) --得到大于等于0的有效结果值 end return count end go -如果我们查询的目标是一个可以直接得到的结果集表格 --内嵌表值函数------------------------------------IN --我们希望了解任何一个产品分类的所有产品信息何解 create function QueryProductInfoByCategory---函数名 (categoryname nvarchar(10))---形参字段 returns table with encryption as return (select * from ProductInfoView where 分类名categoryname) go --如果我们发现有时候要得到的结果不方便进行直接查询得到我们可以将查询过程分散 使用多于具有标志函数来完成全过程 --使用多语句表值函数------------------------------TF --Multistatement Table_valued Functions --我们想要知道目前的有效用户数量何解 create function QueryAccountInfoByEnable() returns infotable table (数量分类 nvarchar(20),本类数量 int) with encryption as begin declare enablecount int,disablecount int set enablecount (select count(accountid)from AccountInfo where [enable]1) set disablecount(select count(accountid)from AccountInfo where [enable]0) insert into infotable(数量分类,本类数量) values(有效用户,enablecount) insert into infotable(数量分类,本类数量) values(无效用户,disablecount) return end go --------------------------------------------------------------------- --创建存储过程接受参数完成合理的执行过程执行过程默认可以不提供返回值默认等效于void方法 --------------SP create procedure RegAccountInfo 变量名 变量类型(实参) with encryption as begin .................. end go execute SP名 (形参) go --------------------------------------------------------------------- --触发器一种特殊的存储过程满足某些对数据的发生变化的操作条件时会自动执行 --触发器的设计者需要编写合理的完整代码以表示自动执行的逻辑达到维护数据完整性的要求 1.触发器是绑定在一个表中的 2.触发器的执行条件为所绑定的表中数据发生了变化而不是查询 3.常见的触发器的执行时机为改变的代码在缓存中产生执行效果之后触发 4.触发过程中有两个内部辅助表inserted与deleted,分别表示本次操作将会加入的新数据及操作中 可能被删除的就数据任何一次update操作都会同时导致inserted,delected发生改变着两个表格 的格式与本表完全一致 create trigger AddSaleScoreTrigger on SaleLog --on后面要写的是绑定表绑定表的变化导致触发的执行 for insert --描述触发的前提 as begin declare buycount int ,buyprice money,buyaccount nvarchar(20) declare oldscore money,newscore money select buycountsalecount, buypricesaleprice, buyaccountaccountid from inserted --从最新变化的内部数据表中获取关键数据 set oldscore(select buyscore from AccountInfo where accountidbuyaccount) set newscoreoldscorebuycount*buyprice update AccountInfo set buyscorenewscore where accountidbuyaccount end go --------------------------------------------------------------------------------------- /* 游标针对指定的数据范围可以进行分行的依次操作操作次数取决于范围的容量 fetch--取得某行的操作权 fetch next--取得下一行的操作权 fetch_status--取得操作权的结果之状态返回值0表示成功非0表示失败 例如达到了数据范围的结尾等均会导致失败 事务一系列操作的集合具有整体全部成功或全部失败的特点。必须同时具备ACID四大基本属性 A原子性(Atomicity)本系列操作的目标是完成独立的任务所有操作内容为了本任务不可以分割--复制文件中途取消 C一致性(Consistentency)在操作目标中而偶们得到的结果与操作描述的结果必须保持一致数据处理过程中不得有丢失或扭曲 I隔离性(Isolation)在多线程环境中事务执行过程与其他事务执行过程相互分离的 D持久性(Durability)事务操作完毕之后如果提交成功则其产生的影响必须持久保持 隐形事务常见的所有SQL语句均会导致自动生成隐形事务以保证某一条语句的执行效果完整性。例如insert into 显示事务通过明确的关键语句代码指定事务执行范围在范围之内的一列写执行代码受到自定义事务的控制 可以明确的对本事务的执行开始、保存、回滚、提交、验证等操作 begin transaction--启动事务显示事务开始控制 rollback transaction--回滚事务整个事务会抹除 commit transation --提交事务确认本事务有效并尝试保证其持久性 error--针对事务过程中的任何一条执行监测器执行过程是否有误 */ use MyDB GO --假设有两个由于历史原因造成的用户数据表需要归并 create table UserInfoOne ( userid nvarchar(20) not null primary key, userpwd nvarchar(30) not null ) go create table UserInfoTwo ( userid nvarchar(20) not null primary key, userpwd nvarchar(30) not null ) go delete from UserInfoOne delete from UserInfoTwo go insert into UserInfoOne(userid,userpwd) values (mike,mike2122) insert into UserInfoOne(userid,userpwd) values (jie,jie2122) insert into UserInfoOne(userid,userpwd) values (hong,hong2122) go insert into UserInfoTwo(userid,userpwd) values (mike,mike2122) insert into UserInfoTwo(userid,userpwd) values (xiao,xiao2122) insert into UserInfoTwo(userid,userpwd) values (yun,yun2122) go select * from UserInfoOne select* from UserInfoTwo go /* 在存储过程或触发器中使用 Transact-SQL 游标的典型过程为 声明 Transact-SQL 变量包含游标返回的数据。为每个结果集列声明一个变量。声明足够大的变量来保存列返回的值并声明变量的类型为可从列数据类型隐式转换得到的数据类型。 使用 DECLARE CURSOR 语句将 Transact-SQL 游标与 SELECT 语句相关联。另外DECLARE CURSOR 语句还定义游标的特性例如游标名称以及游标是只读还是只进。 使用 OPEN 语句执行 SELECT 语句并填充游标。 使用 FETCH INTO 语句提取单个行并将每列中的数据移至指定的变量中。然后其他 Transact-SQL 语句可以引用那些变量来访问提取的数据值。Transact-SQL 游标不支持提取行块。 使用 CLOSE 语句结束游标的使用。关闭游标可以释放某些资源例如游标结果集及其对当前行的锁定但如果重新发出一个 OPEN 语句则该游标结构仍可用于处理。由于游标仍然存在此时还不能重新使用该游标的名称。DEALLOCATE 语句则完全释放分配给游标的资源包括游标名称。释放游标后必须使用 DECLARE 语句来重新生成游标。 */ --假设操作目标userinfotwo-userinfoone --使用游标分行处理 begin --声明游标 declare MoveUserInfoTwo cursor for select userid,userpwd from UserInfoTwo --打开游标准备开始读取操作 open MoveUserInfoTwo --执行读取 declare userid varchar(20) ,userpwd nvarchar(30) fetch next from MoveUseRInfoTwo into userid,userpwd while(fetch_status0) begin insert into   UserInfoOne(userid,userpwd) values(userid,userpwd) fetch next from MoveUserInfoTwo into userid,userpwd end --完成游标操作关闭游标 close MoveUserInfoTwo --释放游标 deallocate MoveUserInfoTwo end go --游标结合事务操作 begin transaction MoveUserInfoTrans begin declare errorcount int set errorcount0 --声明游标 declare MoveUserInfoTwo cursor for select userid, userpwd from UserInfoTwo --打开游标 open MoveUserInfoTwo --执行读取 declare userid nvarchar(20),userpwd nvarchar(30) fetch next from MoveUserInfoTwo into userid,userpwd while(fetch_status0) begin insert into UserInfoOne(userid,userpwd) values(userid,userpwd) if(error!0) begin set errorcounterrorcount1 break end fetch next from MoveUserInfoTwo into userid,userpwd end --完成游标操作关闭游标 close MoveUserInfoTwo --释放游标 deallocate MoveUserInfoTwo --验证本次事务的操作过程 if(errorcount0) begin commit transaction MoveUserInfoTrans print事务提交成功 end else begin rollback transaction MoveUserInfoTrans print执行过程有误事务已回滚 end end go
http://www.pierceye.com/news/959810/

相关文章:

  • 有教做路桥质检资料的网站吗企业画册印刷
  • 四川省营山县西城建筑公司网站租服务器 wordpress
  • 绿色蔬菜网站模板昆明软件开发公司排名
  • 东台做淘宝网站爱站seo工具包免费版
  • 做网站运营的简历学做家庭树网站
  • 专业做企业网站网页制作与网站建设 在线作业
  • 开放大学门户网站建设方案动易网站模版的制作
  • 怎样做个网站聊城网站推广动态
  • 门户网站优化南阳网站制作哪家好
  • 环球易购招聘网站建设宜昌最权威网站建设公司
  • 建设银行官网首页网站南山片区怎么免费制作一个网站
  • 100个免费推广网站的排名wordpress改变默认后台登录地址
  • 做爰片免费观看网站腾讯广点通
  • 上海小企业网站建设我想找个人做网站
  • 第一代网站建设技术wordpress设置金币
  • 邯郸移动网站建设价格制作移动端网站价格
  • wordpress设置多站点盐城公司做网站
  • 便宜建站空间深圳品牌网站设计格
  • 网站 建设可行性报告做公司网站的平台
  • 什么网站内链建设建设专业网站怎样收费
  • wordpress 图片站主题seo前景
  • jsp编写网站网站开发售后工作
  • 门户网站建站目标泰安招聘信息最新招聘2022
  • 电商网站建设效果app技术
  • 关于文化的网站模板做免费小说网站怎样赚钱
  • 做外贸的人常用的网站黄骅贴吧二手房
  • 网站建设科目提供网站建设教学视频
  • iis搭建网站教程win10淘宝客网站建设的策略
  • 怎么做一个网站 免费90平方设计
  • 网站建设的目的与意义是什么东营网站建设教程