??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲AV综合色区无码一二三区,亚洲成?v人片天堂网无码,亚洲av无码成人精品区一本二本 http://www.tkk7.com/SIDNEY/category/6408.htmlzh-cnTue, 27 May 2008 06:09:06 GMTTue, 27 May 2008 06:09:06 GMT60inner,outer,left,right joinhttp://www.tkk7.com/SIDNEY/archive/2008/05/27/203152.html渠上?/dc:creator>渠上?/author>Tue, 27 May 2008 03:24:00 GMThttp://www.tkk7.com/SIDNEY/archive/2008/05/27/203152.htmlhttp://www.tkk7.com/SIDNEY/comments/203152.htmlhttp://www.tkk7.com/SIDNEY/archive/2008/05/27/203152.html#Feedback0http://www.tkk7.com/SIDNEY/comments/commentRss/203152.htmlhttp://www.tkk7.com/SIDNEY/services/trackbacks/203152.htmlinner,outer,left,right join
SQL语句中的JION语句的认? -

                                      

 

jion 语句有三U,inner join, left outer join ?right outer join 都可以简写,分别为jion,left join,right jion?
jion语句可以用来l合两个表中的记录,只要在公共字D之中有相符的值即?该语句联合两个表查询得到的结果是可以d新的数据Q可以把它看成将两个h相关内容的表联接在一h生成的表Q而一般的select 语句没有q个功能?/div>
1)      内连接,inner join ... on
    语句格式:

    FROM (((? INNER JOIN ? ON ?.字段??.字段? INNER JOIN ? ON ?.字段??.字段? INNER JOIN ? ON Member.字段??.字段? INNER JOIN 表X ON Member.字段?表X.字段?/p>

     例子:

    SELECT *

    FROM (((Member INNER JOIN MemberSort ON Member.MemberSort=MemberSort.MemberSort) INNER JOIN MemberLevel ON Member.MemberLevel=MemberLevel.MemberLevel) INNER JOIN MemberIdentity ON Member.MemberIdentity=MemberIdentity.MemberIdentity) INNER JOIN Wedlock ON Member.Wedlock=Wedlock.Wedlock

    ORDER BY MemberDate DESC

     内连接的功能是,把两个表相关联的记录列出来,必须是相兌的记录?/p>

   2)      左外q接Qleft outer join ... on

    语句格式:

      FROM [表名1] LEFT JOIN [表名2]

      ON [表名1.字段A] 〈关p运符〉[表名2.字段B]

    其实LEFT JOIN 的功能就是将LEFT左边的表?中的所有记录全部保留,而将双的表?中的字段B与表?.字段A相对应的记录昄出来(当用SELECT * ?。而RIGHT JOIN 和LEFT JOIN 相反?/p>

     外连接的功能是,把LEFT左边的表中的所有记录保留,而右边表只保留相兌的记?也就是先执行一ơINNER JOIN,然后把LEFT左边的表中的与右边表没有M兌的记录也保留Q而右边表的字Dؓnull.

3)      叛_q接Qright outer join ... on

    ?left join左右相反?/p>

4)      全连接,full join ... on(不常使用Q只能用于outer)

     功能l合了以上三U联军,先执行一ơinner join,然后把两个表的多余字D都保留Q但q接的对应字Dؓnull.

如果惛_几个表联接v来,在JOIN操作中我们可以进行嵌套操作,有三个表Q表1、表2、表3Q现在将三个表联接v来:

      FROM Q表1 INNER JOIN ? ON ?.序号=?.序号Q?/p>

       INNER JOIN ? ON ?.序号=?.序号

=====================

在一个正规化的数据库环境? 我们怼到q款情Ş: 所需的资料ƈ不是攑֜同一个资料表? 在这个时? 你就要用?Join
当然 Join 如何不同的数据库的资料l合, q要看你如何使用? 一共有四种不同?Join 的方? 在这文章中我们ؓ你介l?Inner Join ?Outer Join 以及其应?
Inner Join
Inner Join 应该是最常用?Join 方式, 它只会传回符?Join 规则的纪? q是先来看看语法
Select <要选择的字D?gt; From <主要资料?gt;
<Join 方式> <ơ要资料?gt; [On <Join 规则>]
现在我们利用 MS SQL 内徏的北风数据库来实际练习一? 惛_了解 MS SQL 的内建数据库, 你可以看?SQL Server 的内建数据库 q篇文章
h开 QA (Query Analyzer), Z使用北风数据? 请先执行 Use Northwind, 然后执行
Select ProductId, ProductName, SupplierId From Products
?Products 产品资料表中取出三个字段, 分别是品代? 产品名称, 供货商代? 但查询出来的l果保证让你的老板很不满意, 因ؓ供货商代码对于hcd在是无虾cx? q个时?Join 可以帮上忙? 藉由 Join Suppliers q个资料表我们便可以查询C货商名称
Select ProductId, ProductName, Suppliers.SupplierId
From Products
Inner Join Suppliers
Products.Suppliers = Suppliers.SupplierId
q款的查询结果是不是卡清楚呢! Inner Join 的主要精就?exclusive , 叫它做排他性吧! 是?Join 规则不相W的资料׃被排除掉, 譬如讲在 Product 中有一品的供货商代?(SupplierId), 没有出现?Suppliers 资料表中, 那么q笔记录便会被排除掉
Outer Join
q款?Join 方式是一般h比较用到的, 甚至有些 SQL 的管理者也从未用过, q真是一件悲哀的代? 因ؓ善用 Outer Join 是可以简化一些查询的工作? 先来看看 Outer Join 的语?
Select <要查询的字段> From <Left 资料?gt;
<Left | Right> [Outer] Join <Right 资料?gt; On <Join 规则>
语法中的 Outer 是可以省略的, 例如你可以用 Left Join 或是 Right Join, 在本质上, Outer Join ?inclusive, 叫它做包Ҏ吧! 不同?Inner Join 的排他? 因此?Left Outer Join 的查询结果会包含所?Left 资料表的资料, 颠倒过来讲, Right Outer Join 的查询就会包含所?Right 资料表的资料, 接下来我们还是来做些实际操作, 仍然是用北风数据库, 但要先做一些小的修改, 才能辑ֈ我们要的l果
首先要拿?Products 资料表的 Foreign Key, 否则没有法度?Products 资料表新增一W?SupplierId 没有Ҏ?Suppliers 资料表的U录, 要知׃个资料表?Constraint 你可以执?SQL 内徏?sp_helpconstraint , ?QA 执行
sp_helpconstraint Products
接下来删?FK_Products_Suppliers q个 Foreign Key
Alter Table Products
Drop Constraint FK_Products_Suppliers
再来新增一W纪录于 Products 资料? SupplierId 使用 50 是因为它q没有对映到 Suppliers 资料表中的记?
Insert Into Products (ProductName,SupplierId,CategoryId)
values ('Test Product','50','1')
现在我们再执行头前的查询, 只是?Inner Join 改ؓ Left Outer Join
Select ProductId, ProductName, Suppliers.SupplierId
From Products
Left Outer Join Suppliers
Products.Suppliers = Suppliers.SupplierId
比较一下两U?Join 方式的查询结? 你应该就会知影其中的差别!
再来看看 Right Outer Join, h增下底这W记?
Insert Into Suppliers (CompanyName)
values ('LearnASP')
现在请?Right Out Join 来作查询, 比较看看查询的结果和 Inner Join 有什么不?
L不相W纪?
q里我们来看看如何?Out Join 来找不相W纪? 可能是有子纪录却没有父纪录或是颠倒过?
Select Suppliers.CompanyName From Products
Right Join Suppliers
On Products.SupplierId = Suppliers.SupplierId
Where Products.SupplierId is Null
执行l果你会扑ֈ一W资料ؓ LearnASP, 该笔供货商资料存? 但基本上已经没有产品是来自这个供货商, 惌一下如果不?Outer Join 你要怎么以一?SQL 指o完成同一查询l果! 知道 Outer Join 的好用了? 再执?
Select Products.ProductName
From Products
Left Join Suppliers
On Products.SupplierId = Suppliers.SupplierId
Where Suppliers.SupplierId is Null
q个查询l果你会发现 Test Product q项产品竟然找不C货商的资?




]]>'SQLOLEDB' 无法启动分布式事务?因ؓC务不能登记到指定的事务处理器中?/title><link>http://www.tkk7.com/SIDNEY/archive/2008/03/31/189802.html</link><dc:creator>渠上?/dc:creator><author>渠上?/author><pubDate>Mon, 31 Mar 2008 08:29:00 GMT</pubDate><guid>http://www.tkk7.com/SIDNEY/archive/2008/03/31/189802.html</guid><wfw:comment>http://www.tkk7.com/SIDNEY/comments/189802.html</wfw:comment><comments>http://www.tkk7.com/SIDNEY/archive/2008/03/31/189802.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/SIDNEY/comments/commentRss/189802.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/SIDNEY/services/trackbacks/189802.html</trackback:ping><description><![CDATA[-------------------------------------------------------------------------------------------------------------------------------------------------------<br /> 操作未能执行Q因?OLE DB [/i][i]提供E序 'SQLOLEDB' [/i][i]无法启动分布式事务?[OLE/DB provider returned message: [/i][i]C务不能登记到指定的事务处理器中?] OLE DB [/i][i]错误跟踪QOLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a[/i][i]Q?br /> --------------------------------------------------------------------------------------------------------------------------------------------------------<br /> 理工具-->lg服务-->lg服务-->计算?->右键 我的电脑 -->属?->MSDTC -->安全配置-->里面都打?不要求验? <img src ="http://www.tkk7.com/SIDNEY/aggbug/189802.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/SIDNEY/" target="_blank">渠上?/a> 2008-03-31 16:29 <a href="http://www.tkk7.com/SIDNEY/archive/2008/03/31/189802.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL Server 索引l构及其使用http://www.tkk7.com/SIDNEY/archive/2008/03/28/189215.html渠上?/dc:creator>渠上?/author>Fri, 28 Mar 2008 02:56:00 GMThttp://www.tkk7.com/SIDNEY/archive/2008/03/28/189215.htmlhttp://www.tkk7.com/SIDNEY/comments/189215.htmlhttp://www.tkk7.com/SIDNEY/archive/2008/03/28/189215.html#Feedback0http://www.tkk7.com/SIDNEY/comments/commentRss/189215.htmlhttp://www.tkk7.com/SIDNEY/services/trackbacks/189215.htmlSQL Server 索引l构及其使用Q一Q?br />
作者:freedk

一、深入浅出理解烦引结?/strong>

  实际上,您可以把索引理解ZU特D的目录。微软的SQL SERVER提供了两U烦引:聚集索引Qclustered indexQ也U聚cȝ引、簇集烦引)和非聚集索引Qnonclustered indexQ也U非聚类索引、非集索引Q。下面,我们举例来说明一下聚集烦引和非聚集烦引的区别Q?br />   其实Q我们的汉语字典的正文本w就是一个聚集烦引。比如,我们要查“?#8221;字,׃很自然地d字典的前几页Q因?#8220;?#8221;的拼x“an”Q而按照拼x序汉字的字典是以英文字母“a”开头ƈ?#8220;z”l尾的,那么“?#8221;字就自然地排在字典的前部。如果您d了所有以“a”开头的部分仍然找不到这个字Q那么就说明您的字典中没有这个字Q同LQ如果查“?#8221;字,那您也会您的字典翻到最后部分,因ؓ“?#8221;的拼x“zhang”。也是_字典的正文部分本w就是一个目录,您不需要再L其他目录来找到您需要找的内宏V我们把q种正文内容本n是一U按照一定规则排列的目录UCؓ“聚集索引”?br />   如果您认识某个字Q您可以快速地从自动中查到q个字。但您也可能会遇到您不认识的字,不知道它的发韻Iq时候,您就不能按照刚才的方法找到您要查的字Q而需要去Ҏ“偏旁部首”查到您要扄字,然后Ҏq个字后的页码直接翻到某|扑ֈ您要扄字。但您结?#8220;部首目录”?#8220;字表”而查到的字的排序q不是真正的正文的排序方法,比如您查“?#8221;字,我们可以看到在查部首之后的检字表?#8220;?#8221;的页码是672,字表?#8220;?#8221;的上面是“?#8221;字,但页码却?3,“?#8221;的下面是“?#8221;字,面?90c很昄Q这些字q不是真正的分别位于“?#8221;字的上下方,现在您看到的q箋?#8220;驰、张、徃”三字实际上就是他们在非聚集烦引中的排序,是字典正文中的字在非聚集索引中的映射。我们可以通过q种方式来找到您所需要的字,但它需要两个过E,先找到目录中的结果,然后再翻到您所需要的늠。我们把q种目录Ua是目录,正文Ua是正文的排序方式UCؓ“非聚集烦?#8221;?br />   通过以上例子Q我们可以理解到什么是“聚集索引”?#8220;非聚集烦?#8221;。进一步引申一下,我们可以很容易的理解Q每个表只能有一个聚集烦引,因ؓ目录只能按照一U方法进行排序?br />
二、何时用聚集烦引或非聚集烦?/strong>

下面的表ȝ了何时用聚集烦引或非聚集烦引(很重要)Q?/p>
动作描述 使用聚集索引 使用非聚集烦?/td>
列经常被分组排序 ?/td> ?/td>
q回某范围内的数?/td> ?/td> 不应
一个或极少不同?/td> 不应 不应
数目的不同?/td> ?/td> 不应
大数目的不同?/td> 不应 ?/td>
频繁更新的列 不应 ?/td>
外键?/td> ?/td> ?/td>
主键?/td> ?/td> ?/td>
频繁修改索引?/td> 不应 ?/td>

  事实上,我们可以通过前面聚集索引和非聚集索引的定义的例子来理解上表。如Q返回某范围内的数据一V比如您的某个表有一个时间列Q恰好您把聚合烦引徏立在了该列,q时您查?004q??日至2004q?0?日之间的全部数据Ӟq个速度将是很快的Q因为您的这本字典正文是按日期进行排序的Q聚cȝ引只需要找到要索的所有数据中的开头和l尾数据卛_Q而不像非聚集索引Q必d查到目录中查到每一Ҏ据对应的늠Q然后再Ҏ늠查到具体内容?br />
三、结合实际,谈烦引用的误区

  理论的目的是应用。虽然我们刚才列Z何时应用聚集烦引或非聚集烦引,但在实践中以上规则却很容易被忽视或不能根据实际情况进行综合分析。下面我们将Ҏ在实践中遇到的实际问题来谈一下烦引用的误区Q以便于大家掌握索引建立的方法?br />
1、主键就是聚集烦?br />   q种xW者认为是极端错误的,是对聚集索引的一U浪贏V虽然SQL SERVER默认是在主键上徏立聚集烦引的?br />   通常Q我们会在每个表中都建立一个ID列,以区分每条数据,q且q个ID列是自动增大的,步长一般ؓ1。我们的q个办公自动化的实例中的列Gid是如此。此Ӟ如果我们这个列设ؓ主键QSQL SERVER会将此列默认集烦引。这样做有好处,是可以让您的数据在数据库中按照IDq行物理排序Q但W者认样做意义不大?br />   显而易见,聚集索引的优势是很明昄Q而每个表中只能有一个聚集烦引的规则Q这使得聚集索引变得更加珍贵?br />   从我们前面谈到的聚集索引的定义我们可以看出,使用聚集索引的最大好处就是能够根据查询要求,q速羃查询范_避免全表扫描。在实际应用中,因ؓIDh自动生成的,我们q不知道每条记录的IDP所以我们很隑֜实践中用IDhq行查询。这׃让ID可个主键作集烦引成ZU资源浪贏V其ơ,让每个ID号都不同的字D作集烦引也不符?#8220;大数目的不同值情况下不应建立聚合索引”规则Q当Ӟq种情况只是针对用户l常修改记录内容Q特别是索引的时候会负作用,但对于查询速度q没有媄响?br />   在办公自动化pȝ中,无论是系l首|C的需要用L收的文g、会议还是用戯行文件查询等M情况下进行数据查询都M开字段的是“日期”q有用户本n?#8220;用户?#8221;?br />   通常Q办公自动化的首会昄每个用户未{收的文件或会议。虽然我们的where语句可以仅仅限制当前用户未{收的情况,但如果您的系l已建立了很长时_q且数据量很大,那么Q每ơ每个用h开首页的时候都q行一ơ全表扫描,q样做意义是不大的,l大多数的用?个月前的文g都已l浏览过了,q样做只能徒增数据库的开销而已。事实上Q我们完全可以让用户打开pȝ首页Ӟ数据库仅仅查询这个用戯3个月来未阅览的文Ӟ通过“日期”q个字段来限制表扫描Q提高查询速度。如果您的办公自动化pȝ已经建立?q_那么您的首页昄速度理论上将是原来速度8倍,甚至更快?br />   在这里之所以提?#8220;理论?#8221;三字Q是因ؓ如果您的聚集索引q是盲目地徏在IDq个主键上时Q您的查询速度是没有这么高的,即您在“日期”q个字段上徏立的索引Q非聚合索引Q。下面我们就来看一下在1000万条数据量的情况下各U查询的速度表现Q?个月内的数据?5万条Q:

Q?Q仅在主键上建立聚集索引Qƈ且不划分旉D:

Select gid,fariqi,neibuyonghu,title from tgongwen

用时Q?28470毫秒Q即Q?28U)

Q?Q在主键上徏立聚集烦引,在fariq上徏立非聚集索引Q?/p>

select gid,fariqi,neibuyonghu,title from Tgongwen
where fariqi> dateadd(day,-90,getdate())

用时Q?3763毫秒Q?4U)

Q?Q将聚合索引建立在日期列QfariqiQ上Q?/p>

select gid,fariqi,neibuyonghu,title from Tgongwen
where fariqi> dateadd(day,-90,getdate())

用时Q?423毫秒Q?U)

  虽然每条语句提取出来的都?5万条数据Q各U情늚差异却是巨大的,特别是将聚集索引建立在日期列时的差异。事实上Q如果您的数据库真的?000万容量的话,把主键徏立在ID列上Q就像以上的W??U情况,在网上的表现就是超ӞҎ无法显C。这也是我摒弃ID列作集烦引的一个最重要的因素。得Z上速度的方法是Q在各个select语句前加Q?/p>

declare @d datetime
set @d=getdate()

q在select语句后加Q?/p>

select [语句执行p旉(毫秒)]=datediff(ms,@d,getdate())

2、只要徏立烦引就能显著提高查询速度
  事实上,我们可以发现上面的例子中Q第2?条语句完全相同,且徏立烦引的字段也相同;不同的仅是前者在fariqi字段上徏立的是非聚合索引Q后者在此字D上建立的是聚合索引Q但查询速度却有着天壤之别。所以,q是在M字段上简单地建立索引p提高查询速度?br />   从徏表的语句中,我们可以看到q个有着1000万数据的表中fariqi字段?003个不同记录。在此字D上建立聚合索引是再合适不q了。在现实中,我们每天都会发几个文Ӟq几个文件的发文日期q同,q完全符合徏立聚集烦引要求的Q?#8220;既不能绝大多数都相同Q又不能只有极少数相?#8221;的规则。由此看来,我们建立“适当”的聚合烦引对于我们提高查询速度是非帔R要的?br />
3、把所有需要提高查询速度的字D都加进聚集索引Q以提高查询速度
  上面已经谈到Q在q行数据查询旉M开字段的是“日期”q有用户本n?#8220;用户?#8221;。既然这两个字段都是如此的重要,我们可以把他们合qv来,建立一个复合烦引(compound indexQ?br />   很多为只要把M字段加进聚集索引Q就能提高查询速度Q也有h感到qhQ如果把复合的聚集烦引字D分开查询Q那么查询速度会减慢吗Q带着q个问题Q我们来看一下以下的查询速度Q结果集都是25万条数据Q:Q日期列fariqi首先排在复合聚集索引的v始列Q用户名neibuyonghu排在后列Q:

Q?Qselect gid,fariqi,neibuyonghu,title from Tgongwen where fariqi>''2004-5-5'' 

查询速度Q?513毫秒

Q?Qselect gid,fariqi,neibuyonghu,title from Tgongwen
            where fariqi>''2004-5-5'' and neibuyonghu=''办公?'

查询速度Q?516毫秒

Q?Qselect gid,fariqi,neibuyonghu,title from Tgongwen where neibuyonghu=''办公?'

查询速度Q?0280毫秒

  从以上试验中Q我们可以看到如果仅用聚集烦引的起始列作为查询条件和同时用到复合聚集索引的全部列的查询速度是几乎一LQ甚x用上全部的复合烦引列q要略快Q在查询l果集数目一L情况下)Q而如果仅用复合聚集烦引的非v始列作ؓ查询条g的话Q这个烦引是不vM作用的。当Ӟ语句1?的查询速度一h因ؓ查询的条目数一P如果复合索引的所有列都用上,而且查询l果的话,q样׃形成“索引覆盖”Q因而性能可以辑ֈ最优。同Ӟ误住:无论您是否经怋用聚合烦引的其他列,但其前导列一定要是用最频繁的列?br />
四、其他书上没有的索引使用l验ȝ

1、用聚合索引比用不是聚合索引的主键速度?br />   下面是实例语句:Q都是提?5万条数据Q?/p>

select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi=''2004-9-16''

使用旉Q?326毫秒

select gid,fariqi,neibuyonghu,reader,title from Tgongwen where gid<=250000

使用旉Q?470毫秒

q里Q用聚合索引比用不是聚合索引的主键速度快了q?/4?br />
2、用聚合索引比用一般的主键作order by旉度快,特别是在数据量情况?/p>

select gid,fariqi,neibuyonghu,reader,title from Tgongwen order by fariqi

用时Q?2936

select gid,fariqi,neibuyonghu,reader,title from Tgongwen order by gid

用时Q?8843

  q里Q用聚合索引比用一般的主键作order byӞ速度快了3/10。事实上Q如果数据量很小的话Q用聚集索引作ؓ排序列要比用非聚集索引速度快得明显的多Q而数据量如果很大的话Q如10万以上,则二者的速度差别不明显?br />
3、用聚合烦引内的时间段Q搜索时间会按数据占整个数据表的癑ֈ比成比例减少Q而无合烦引用了多少个:

select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi>''2004-1-1''

用时Q?343毫秒Q提?00万条Q?

select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi>''2004-6-6''

用时Q?170毫秒Q提?0万条Q?/p>

select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi=''2004-9-16''

用时Q?326毫秒Q和上句的结果一模一栗如果采集的数量一P那么用大于号和等于号是一LQ?/p>

select gid,fariqi,neibuyonghu,reader,title from Tgongwen
            where fariqi>''2004-1-1'' and fariqi<''2004-6-6''

用时Q?280毫秒

4、日期列不会因ؓ有分U的输入而减慢查询速度
  下面的例子中Q共?00万条数据Q?004q??日以后的数据?0万条Q但只有两个不同的日期,日期_到日Q之前有数据50万条Q有5000个不同的日期Q日期精到U?/p>

select gid,fariqi,neibuyonghu,reader,title from Tgongwen
          where fariqi>''2004-1-1'' order by fariqi

用时Q?390毫秒

select gid,fariqi,neibuyonghu,reader,title from Tgongwen
            where fariqi<''2004-1-1'' order by fariqi

用时Q?453毫秒

五、其他注意事?/strong>

  “水可载舟Q亦可覆?#8221;Q烦引也一栗烦引有助于提高索性能Q但q多或不当的索引也会Dpȝ低效。因为用户在表中每加q一个烦引,数据库就要做更多的工作。过多的索引甚至会导致烦引碎片?br />   所以说Q我们要建立一?#8220;适当”的烦引体p,特别是对聚合索引的创建,更应_求精Q以使您的数据库能得到高性能的发挥?br />   当然Q在实践中,作ؓ一个尽职的数据库管理员Q您q要多测试一些方案,扑և哪种Ҏ效率最高、最为有效?br />
Q待l?..Q?br />
trackback: http://www.vckbase.com/document/viewdoc/?id=1307



]]>
扚w查所有数据表http://www.tkk7.com/SIDNEY/archive/2008/01/31/178631.html渠上?/dc:creator>渠上?/author>Thu, 31 Jan 2008 02:55:00 GMThttp://www.tkk7.com/SIDNEY/archive/2008/01/31/178631.htmlhttp://www.tkk7.com/SIDNEY/comments/178631.htmlhttp://www.tkk7.com/SIDNEY/archive/2008/01/31/178631.html#Feedback0http://www.tkk7.com/SIDNEY/comments/commentRss/178631.htmlhttp://www.tkk7.com/SIDNEY/services/trackbacks/178631.html

 DECLARE dt_Cursor CURSOR DYNAMIC FOR

select obj.name--, count(*)

from sysobjects obj, syscolumns col

where obj.id=col.id and col.name = 'SEC_CD' and obj.type='U'

 

OPEN dt_Cursor

 

declare @firstLine bit

set @firstLine = 1

Declare @sql varchar(8000)

set @sql = ''

Declare @tblName varchar(100)

FETCH NEXT FROM dt_Cursor INTO @tblName

WHILE @@FETCH_STATUS = 0

BEGIN

   if @firstLine=1

       set @firstLine=0

   else

       set @sql = @sql + ' union all '

 

   set @sql = @sql + 'select ''' + @tblName + ''' as TABLE_NM, count(*) as ROW_CNT from ' + @tblName + ' where SEC_CD=''02188'''

 

   FETCH NEXT FROM dt_Cursor INTO @tblName

END

 

CLOSE dt_Cursor

DEALLOCATE dt_Cursor

 

exec (@sql)



]]>
SQL server 2000邮g配置Ҏhttp://www.tkk7.com/SIDNEY/archive/2008/01/18/176102.html渠上?/dc:creator>渠上?/author>Fri, 18 Jan 2008 02:17:00 GMThttp://www.tkk7.com/SIDNEY/archive/2008/01/18/176102.htmlhttp://www.tkk7.com/SIDNEY/comments/176102.htmlhttp://www.tkk7.com/SIDNEY/archive/2008/01/18/176102.html#Feedback0http://www.tkk7.com/SIDNEY/comments/commentRss/176102.htmlhttp://www.tkk7.com/SIDNEY/services/trackbacks/176102.html
--========================================
--SQL 邮g配置
--outlook 2003Qsql server 2000Q?63邮局
--========================================
OutLook配置:OutLook 2000 |上说经常发不成?我用的是OutLook 2003,打开sql server 2000的企业管理器Q展开支持服务Q右?#8220;sql 邮g”点属性。这旉面就会出现有outlook了。选择它就可以了?br /> sql server 2000:在控刉板中打开“服务”Q找刎ͼMSSQLSERVER ?SQLSERVERAGENTQ其d方式不应该ؓ“本地pȝ”Q应该是h邮g客户端程序操作权限的 Windows 用户Q比?Windows 理员,修改Ҏ为,双击该服务,切换?#8220;d”标签Q选择“此帐?#8221;Q点?#8220;览”选择一个用Pq输入密码,点击“定”。右键,重新启动q两个服务。展开“理”Q?#8220;SQL Server 代理”Q在“操作?#8221;上点d键,“新徏一个操作员”Q这个操作员是我们要向其发送电子邮件的人。在“企业理?#8221;中,展开“支持服务”Q在“SQL 邮g”上点d键,“属?#8221;Q在下拉列表框中选择“配置文g?#8221;Q点L?查是否成?如果我们要对作业q行监视Q比如当数据库备份失败时向操作员发送邮Ӟ得?#8220;SQL Server 代理”?#8220;作业”列表中打开对应作业的属性,切换?#8220;通知”标签Q选择相应操作员即可。至此,一?SQL 邮g配置完成了Q请保您的 SQL Server Agent 随时都在q行。请保您的 SQL Server 补丁是最新的?br />
要注意的几个问题Q?br /> 1.sql server 2000的启动帐戯和sqlagent的启动帐L同。ƈ且不能用pȝ帐户?br /> 2.smtp服务器是否需要验证。hotmail的免费信好像不可以在outlook里设|?最好用OutLook 2003
3.在sql邮gq行q程中不能关闭outlookQ否则不能发送邮?要先启动OutLook 2003 再启?SQL ,可执行exec startmail /exec stopmail 来启动或停止sqlmail.

--下面为测试代码,可将直接攑օ作业里,增加调度卛_q行.
--=======================================
--存储过E的l果发送给指定联系?br /> --=======================================

exec xp_sendmail [url=mailto:'***@hotmail.com',@query='sp_configure']'***@hotmail.com',@query='sp_configure'[/url]
--============================================
--l计northwind数据库中相关信息
--q将l果发送到指定的信?br /> --原理Qnorthwind数据库中没有xp-sendmail
--存储q程Q所以采用方式ؓQ?br /> --查询结果写入一个全局临时?br /> --然后在删除全局临时?br /> --===========================================

set nocount on
select case when(grouping(od.productid)=1)then '定单总计:'
else isnull(od.productid,'I?) end as productid,
case when (grouping(od.orderid)=1)then '产品总计:'
else isnull(od.orderid,'I?)end as orderid,sum(od.quantity) as'总计'
into ##boyi55
from (select convert(nvarchar(10),productid) as productid,convert(nvarchar(10),orderid) as orderid,quantity from [order details]) as od
group by od.productid,od.orderid
with cube
exec master..xp_sendmail @recipients='h11h99@126.com;fengjicai@hotmail.com;queeny_fei@yahoo.com.cn',
@subject='northwind数据库中order details相关信息汇ȝ?,
@message='此信息由sql server 2000数据库作业自动发送,如果输出错误Q请直接回复e-mail刎ͼ[url=mailto:fengjicai@hotmail.com]***@hotmail.com[/url]',
@query='select * from ##boyi55',
@width=100--讄查询的输出文本行?br /> drop table ##boyi55
set nocount off

--===========================================
--结果作为附件文件发?br /> --===========================================

exec master..xp_sendmail @recipients='***@hotmail.com',
@query='select * from information_schema.tables',
@subject='SQL Server report',
@message='The contents of information_schema.tables:',
@attach_results='true',
@width= 250
======================

 

--===========================================
--===========================================

xp_sendmail {[@recipients =] "recipients [;...n]"}
  [,[@message =] "message"]
  [,[@query =] "query"]
  [,[@attachments =] attachments]
  [,[@copy_recipients =] "copy_recipients [;...n]"
  [,[@blind_copy_recipients =] "blind_copy_recipients [;...n]"
  [,[@subject =] "subject"]
  [,[@type =] "type"]
  [,[@attach_results =] "attach_value"]
  [,[@no_output =] "output_value"]
  [,[@no_header =] "header_value"]
  [,[@width =] width]
  [,[@separator =] "separator"]
  [,[@echo_error =] "echo_value"]
  [,[@set_user =] "user"]
  [,[@dbuse =] "database"]
  
  其中@recipients是必需?
  
  参数说明Q?
  
  参数 说明
  @recipients 收g人,中间用逗号分开
  @message 要发送的信息
  @query 定执行q依附邮件的有效查询Q除触发器中的插入表及删除表外,此查询能引用M对象
  @attachments 附g
  @copy_recipients 抄?
  @blind_copy_recipients 密?
  @subject 标题
  @attach_results 指定查询l果做ؓ附g发?
  @no_header 不发送查询结果的列名
  @set_user 查询联接的用户名Q默认ؓGuset
  @dbuse 查询所用的数据库,默认为缺省数据库



]]>
备䆾数据?/title><link>http://www.tkk7.com/SIDNEY/archive/2007/12/21/169234.html</link><dc:creator>渠上?/dc:creator><author>渠上?/author><pubDate>Fri, 21 Dec 2007 01:54:00 GMT</pubDate><guid>http://www.tkk7.com/SIDNEY/archive/2007/12/21/169234.html</guid><wfw:comment>http://www.tkk7.com/SIDNEY/comments/169234.html</wfw:comment><comments>http://www.tkk7.com/SIDNEY/archive/2007/12/21/169234.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/SIDNEY/comments/commentRss/169234.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/SIDNEY/services/trackbacks/169234.html</trackback:ping><description><![CDATA[<p> </p> <p>USE [msdb]</p> <p>GO</p> <p>/****** 对象:  Job [pdwq程备䆾?92.168.36.38(每周7覆盖更新)]    脚本日期: 12/21/2007 09:37:05 ******/</p> <p>BEGIN TRANSACTION</p> <p>DECLARE @ReturnCode INT</p> <p>SELECT @ReturnCode = 0</p> <p>/****** 对象:  JobCategory [Database Maintenance]    脚本日期: 12/21/2007 09:37:05 ******/</p> <p>IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'Database Maintenance' AND category_class=1)</p> <p>BEGIN</p> <p>EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'Database Maintenance'</p> <p>IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback</p> <p> </p> <p>END</p> <p> </p> <p>DECLARE @jobId BINARY(16)</p> <p>EXEC @ReturnCode =  msdb.dbo.sp_add_job @job_name=N'pdwq程备䆾?92.168.36.38(每周7覆盖更新)', </p> <p>                   @enabled=1, </p> <p>                   @notify_level_eventlog=2, </p> <p>                   @notify_level_email=0, </p> <p>                   @notify_level_netsend=0, </p> <p>                   @notify_level_page=0, </p> <p>                   @delete_level=0, </p> <p>                   @description=N'pdwq程备䆾?92.168.36.38(每周7覆盖更新)', </p> <p>                   @category_name=N'Database Maintenance', </p> <p>                   @owner_login_name=N'sa', @job_id = @jobId OUTPUT</p> <p>IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback</p> <p>/****** 对象:  Step [a net use  \\192.168.36.38]    脚本日期: 12/21/2007 09:37:06 ******/</p> <p>EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'a net use  \\192.168.36.38', </p> <p>                   @step_id=1, </p> <p>                   @cmdexec_success_code=0, </p> <p>                   @on_success_action=3, </p> <p>                   @on_success_step_id=0, </p> <p>                   @on_fail_action=2, </p> <p>                   @on_fail_step_id=0, </p> <p>                   @retry_attempts=10, </p> <p>                   @retry_interval=1, </p> <p>                   @os_run_priority=0, @subsystem=N'TSQL', </p> <p>                   @command=N'--pdwq程备䆾讑֤安装?92.168.36.38</p> <p>master..xp_cmdshell ''net use  \\192.168.36.38 ****** /user:editor''', </p> <p>                   @database_name=N'master', </p> <p>                   @flags=0</p> <p>IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback</p> <p>/****** 对象:  Step [BACKUP DATABASE [CSRC_RS_NEW]]]    脚本日期: 12/21/2007 09:37:06 ******/</p> <p>EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'BACKUP DATABASE [CSRC_RS_NEW]', </p> <p>                   @step_id=2, </p> <p>                   @cmdexec_success_code=0, </p> <p>                   @on_success_action=3, </p> <p>                   @on_success_step_id=0, </p> <p>                   @on_fail_action=2, </p> <p>                   @on_fail_step_id=0, </p> <p>                   @retry_attempts=0, </p> <p>                   @retry_interval=1, </p> <p>                   @os_run_priority=0, @subsystem=N'TSQL', </p> <p>                   @command=N'BACKUP DATABASE [CSRC_RS_NEW] TO  DISK = N''\\192.168.36.38\d$\data_bak\CSRC_RS_NEW.bak'' WITH  INIT ,  NOUNLOAD ,  NAME = N''CSRC_RS_NEW'',  NOSKIP ,  STATS = 10,  NOFORMAT', </p> <p>                   @database_name=N'CSRC_RS_NEW', </p> <p>                   @flags=0</p> <p>IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback</p> <p>EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'</p> <p>COMMIT TRANSACTION</p> <p>GOTO EndSave</p> <p>QuitWithRollback:</p> <p>         IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION</p> <p>EndSave:</p> <p> <br />  <br /> </p> <img src ="http://www.tkk7.com/SIDNEY/aggbug/169234.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/SIDNEY/" target="_blank">渠上?/a> 2007-12-21 09:54 <a href="http://www.tkk7.com/SIDNEY/archive/2007/12/21/169234.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>参考:SQL排名法http://www.tkk7.com/SIDNEY/archive/2007/11/19/161643.html渠上?/dc:creator>渠上?/author>Mon, 19 Nov 2007 08:02:00 GMThttp://www.tkk7.com/SIDNEY/archive/2007/11/19/161643.htmlhttp://www.tkk7.com/SIDNEY/comments/161643.htmlhttp://www.tkk7.com/SIDNEY/archive/2007/11/19/161643.html#Feedback0http://www.tkk7.com/SIDNEY/comments/commentRss/161643.htmlhttp://www.tkk7.com/SIDNEY/services/trackbacks/161643.htmlTotal_Sales表格

Name

Sales

John

10

Jennifer

15

Stella

20

Sophia

40

Greg

50

Jeff

20

 

要找出每一行的排名Q我們就打入以下?SQL 語句Q?/span>

SELECT a1.Name, a1.Sales, COUNT(a2.sales) Sales_Rank
FROM Total_Sales a1, Total_Sales a2
WHERE a1.Sales <= a2.Sales or (a1.Sales=a2.Sales and a1.Name = a2.Name)
GROUP BY a1.Name, a1.Sales
ORDER BY a1.Sales DESC, a1.Name DESC;

i果:

Name

Sales

Sales_Rank

Greg

50

1

Sophia

40

2

Stella

20

3

Jeff

20

3

Jennifer

15

5

John

10

6

我們先來看 WHERE子句。在字句的第一部分 (a1.Sales <= a2.Sales)Q我們算出有多少{資?Sales Ƅ位的值是比自己本w的值小或是相等。如果在 Sales Ƅ位中沒有同樣大的資料Q那這部分的 WHERE子句本n可以產生出正確的排名?

子句的第二部分,(a1.Sales=a2.Sales and a1.Name = a2.Name)Q則是讓我們在 Sales Ƅ位中有同樣大小的資料時 (?Stella ?Jeff 這兩{資?Q仍然能夠產生正的排名?



]]>
求某一字符在一字符串中出现的次?SQL)http://www.tkk7.com/SIDNEY/archive/2007/10/30/156984.html渠上?/dc:creator>渠上?/author>Tue, 30 Oct 2007 09:02:00 GMThttp://www.tkk7.com/SIDNEY/archive/2007/10/30/156984.htmlhttp://www.tkk7.com/SIDNEY/comments/156984.htmlhttp://www.tkk7.com/SIDNEY/archive/2007/10/30/156984.html#Feedback0http://www.tkk7.com/SIDNEY/comments/commentRss/156984.htmlhttp://www.tkk7.com/SIDNEY/services/trackbacks/156984.html declare @a varchar(100)
set @a='22,11,2601,2603'
select len(replace(@a,',',',,'))-len(@a)

]]>
SQL2005-SSIS 对同一个文件中的不同行cd做不同处?/title><link>http://www.tkk7.com/SIDNEY/archive/2007/10/07/150852.html</link><dc:creator>渠上?/dc:creator><author>渠上?/author><pubDate>Sun, 07 Oct 2007 08:16:00 GMT</pubDate><guid>http://www.tkk7.com/SIDNEY/archive/2007/10/07/150852.html</guid><wfw:comment>http://www.tkk7.com/SIDNEY/comments/150852.html</wfw:comment><comments>http://www.tkk7.com/SIDNEY/archive/2007/10/07/150852.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/SIDNEY/comments/commentRss/150852.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/SIDNEY/services/trackbacks/150852.html</trackback:ping><description><![CDATA[<p>某些时候数据来源是文本文gQ有时候我们经常看到包含主/l、父/子记录在同一个文本文件中Q这在DTS中是非常难以处理的,但这U情况在SSIS中有所改变<br /> 在本文中Q我制造这样一个例子让你明白如何处理这U类型的要求</p> <p>大体的数据流构造像下面q样Q我会仔l加以讲解:<br />  <img alt="" src="http://www.sqlis.com/images/Master%20Detail%20Files/PackageLayout.jpg" /> </p> <p>下面q个图显CZ我们要处理的数据来源的文本格式,其中含有“M”的ؓ主行Q含?#8220;D”的ؓ子行<br />  <img alt="" src="http://www.sqlis.com/images/Master%20Detail%20Files/HowTheTextFileLooks.jpg" /></p> <p>我们徏立一个flat file connection manager指向该文Ӟ在这里,我ƈ不打把行拆分出来,暂时把整行读在一列中<br />  <img alt="" src="http://www.sqlis.com/images/Master%20Detail%20Files/FlatFileConnectionManager.jpg" /></p> <p>下一步我们将拖曳一?Flat File Source Adapter lg到数据流面板Qƈ指定来源和上面所建立的连接来源,且指定输出列<br />  <img alt="" src="http://www.sqlis.com/images/Master%20Detail%20Files/RenamedOutputColumn.jpg" /> </p> <p>完成q个操作后,我们用 Conditional Split Transform lg来把文g中的记录向不同的输出,配置如下<br />  <img alt="" src="http://www.sqlis.com/images/Master%20Detail%20Files/TheConditionalSplit.jpg" /></p> <p>现在我们已经完成了主从行的不同流向,下一步我们将?Script Transform 把行中的信息拆开C同的列中?br /> 使用Script Transformlg的第一步是d一些输出列,当数据经q这个组件时Q下游的lg可以看到这些列<br />  <img alt="" src="http://www.sqlis.com/images/Master%20Detail%20Files/MasterScriptOutputColumns.jpg" /></p> <p>到现在,我们只定义了Script Transform lg生这些列Q但q没有具体的指定列中的内容,下面我们可以通过设计以下脚本来实C同列的内Ҏ什?br />  <img alt="" src="http://www.sqlis.com/images/Master%20Detail%20Files/CodeToParseTheWholeMasterLine.jpg" /></p> <p>最后,我们只需放上2个Raw File Destination Adapterlg接收输出卛_Q下面是包的q行l果<br />  <img alt="" src="http://www.sqlis.com/images/Master%20Detail%20Files/PackageRunSuccessfully.jpg" /><br />  <br />  <br />  <br />   <br />  <br />  </p> <p> </p> 文章来源Qhttp://www.sqlis.com/default.aspx?54<br /> <br /> <p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=449886</p> <img src ="http://www.tkk7.com/SIDNEY/aggbug/150852.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/SIDNEY/" target="_blank">渠上?/a> 2007-10-07 16:16 <a href="http://www.tkk7.com/SIDNEY/archive/2007/10/07/150852.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>优化SQL Server索引的小技?http://www.tkk7.com/SIDNEY/archive/2007/09/10/144033.html渠上?/dc:creator>渠上?/author>Mon, 10 Sep 2007 08:49:00 GMThttp://www.tkk7.com/SIDNEY/archive/2007/09/10/144033.htmlhttp://www.tkk7.com/SIDNEY/comments/144033.htmlhttp://www.tkk7.com/SIDNEY/archive/2007/09/10/144033.html#Feedback0http://www.tkk7.com/SIDNEY/comments/commentRss/144033.htmlhttp://www.tkk7.com/SIDNEY/services/trackbacks/144033.html 

SQL Server中有几个可以让你、调整和优化SQL Server性能的工兗在本文中,我将说明如何用SQL Server的工h优化数据库烦引的使用Q本文还涉及到有关烦引的一般性知识?/p>

关于索引的常?/h5>

影响到数据库性能的最大因素就是烦引。由于该问题的复杂性,我只可能单的谈谈q个问题Q不q关于这斚w的问题,目前有好几本不错的书c可供你参阅。我在这里只讨论两种SQL Server索引Q即clustered索引和nonclustered索引。当考察建立什么类型的索引Ӟ你应当考虑数据cd和保存这些数据的column。同P你也必须考虑数据库可能用到的查询cd以及使用的最为频J的查询cd?/p>

索引的类?/h5>

如果column保存了高度相关的数据Qƈ且常常被序讉KӞ最好用clustered索引Q这是因为如果用clustered索引QSQL Server会在物理上按升序Q默认)或者降序重排数据列Q这样就可以q速的扑ֈ被查询的数据。同P在搜L制在一定范围内的情况下Q对q些column也最好用clustered索引。这是因为由于物理上重排数据Q每个表g只有一个clustered索引?/p>

与上面情늛反,如果columns包含的数据相x较差,你可以用nonculstered索引。你可以在一个表g使用高达249个nonclustered索引——尽我惌不出实际应用场合会用的上q么多烦引?/p>

当表g用主关键字(primary keysQ,默认情况下SQL Server会自动对包含该关键字的column(s)建立一个独有的cluster索引。很昄Q对q些column(s)建立独有索引意味着d键字的唯一性。当建立外关键字Qforeign keyQ关pLQ如果你打算频繁使用它,那么在外关键字cloumn上徏立nonclustered索引不失Z个好的方法。如果表格有clustered索引Q那么它用一个链表来l护数据之间的关系。相反,如果表格没有clustered索引QSQL Server在一个堆栈中保存数据c?/p>

数据?/h5>

当烦引徏立v来的时候,SQLServer徏立数据页QdatapageQ,数据|用以加速搜索的指针。当索引建立h的时候,其对应的填充因子也即被设|。设|填充因子的目的是ؓ了指C索引中数据页的百分比。随着旉的推U,数据库的更新会消耗掉已有的空闲空_q就会导致页被拆分。页拆分的后果是降低了烦引的性能Q因而用该索引的查询会D数据存储的支ȝ。当建立一个烦引时Q该索引的填充因子即被设|好了,因此填充因子不能动态维护?/p>

Z更新数据中的填充因子,我们可以停止旧有索引q建烦引,q新设|填充因子(注意Q这媄响到当前数据库的q行Q在重要场合误}慎用)?em>DBCC INDEXDEFRAG?em>DBCC DBREINDEX是清除clustered和nonculstered索引片的两个命令?em>INDEXDEFRAG是一U在U操作(也就是说Q它不会d其它表格动作Q如查询Q,?em>DBREINDEX则在物理上重建烦引。在l大多数情况下,重徏索引可以更好的消除碎片,但是q个优点是以d当前发生在该索引所在表g其它动作Zh取来得。当出现较大的碎片烦引时Q?em>INDEXDEFRAG会花上一D|较长的时_q是因ؓ该命令的q行是基于小的交互块Qtransactional blockQ?/p>

填充因子

当你执行上述措施中的M一个,数据库引擎可以更有效的返回编入烦引的数据。关于填充因子(fillfactorQ话题已l超Z本文的范_不过我还是提醒你需要注意那些打用填充因子徏立烦引的表格?/p>

在执行查询时QSQL Server动态选择使用哪个索引。ؓ此,SQL ServerҎ每个索引上分布在该关键字上的l计量来军_使用哪个索引。值得注意的是Q经q日常的数据库活动(如插入、删除和更新表格Q,SQL Server用到的这些统计量可能已经“q期”了,需要更新。你可以通过执行DBCC SHOWCONTIG来查看统计量的状态。当你认为统计量已经“q期”Ӟ你可以执行该表格?em>UPDATE STATISTICS命oQ这样SQL Server刷C关于该烦引的信息了?/p>

建立数据库维护计?/h5>

SQL Server提供了一U简化ƈ自动l护数据库的工具。这个称之ؓ数据库维护计划向|Database Maintenance Plan Wizard QDMPWQ的工具也包括了对烦引的优化。如果你q行q个向导Q你会看到关于数据库中关于烦引的l计量,q些l计量作为日志工作ƈ定时更新Q这样就减轻了手工重建烦引所带来的工作量。如果你不想自动定期h索引l计量,你还可以在DMPW中选择重新l织数据和数据页Q这停止旧有烦引ƈ按特定的填充因子重徏索引?/p>

]]>数据库设?/title><link>http://www.tkk7.com/SIDNEY/archive/2007/09/10/143928.html</link><dc:creator>渠上?/dc:creator><author>渠上?/author><pubDate>Mon, 10 Sep 2007 03:21:00 GMT</pubDate><guid>http://www.tkk7.com/SIDNEY/archive/2007/09/10/143928.html</guid><wfw:comment>http://www.tkk7.com/SIDNEY/comments/143928.html</wfw:comment><comments>http://www.tkk7.com/SIDNEY/archive/2007/09/10/143928.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/SIDNEY/comments/commentRss/143928.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/SIDNEY/services/trackbacks/143928.html</trackback:ping><description><![CDATA[  <a target="_new">数据库设?/a>(<a target="_new">Database Design</a>)是指对于一个给定的应用环境Q构造最优的<a target="_new">数据?/a><a target="_new">模式</a>Q徏立数据库及其应用pȝQ之能够有效地存储数据Q满_U用L应用<a target="_new">需?/a>Q信息要求和处理要求Q? <p>  在数据库领域内,常常把用数据库的各<a target="_new">c?/a>pȝl称为数据库应用pȝ?/p> <p><strong>一、数据库?a target="_new">信息pȝ</a></strong><br />   (1)数据库是信息pȝ的核心和基础Q把信息pȝ中大量的数据按一定的模型l织hQ提供存储、维护、检索数据的<br />      功能Q信息pȝ可以方便、及时、准地从数据库中获得所需的信息?br />   (2)数据库是信息pȝ的各个部分能否紧密地l合在一起以及如何结合的关键所在?br />   (3)数据库设计是信息pȝ开发和的重要组成部分?br />   (4)数据库设计h员应该具备的技术和知识Q?br />      数据库的基本知识和数据库设计技?br />      <a target="_new">计算?/a>U学的基知识?a target="_new">E序设计</a>的方法和技?br />      <a target="_new">软g工程</a>的原理和Ҏ<br />      应用领域的知?/p> <p><strong>二、数据库设计的特?/strong> <br />   数据库徏设是g?a target="_new">软g</a>和干件的l合<br />    三分技术,七分理Q十二分基础数据<br />    技术与理的界面称之ؓ“qg”<br />   数据库设计应该与应用pȝ设计相结?br />    l构Q数据)设计Q设计数据库<a target="_new">框架</a>或数据库l构<br />    行ؓQ处理)设计Q设计应?a target="_new">E序</a>、事务处理等<br />   l构和行为分ȝ设计<br />    传统的Y件工E忽视对应用中数据语义的分析和抽象,只要有可能就量推迟数据l构设计的决{早期的数据库设计致力于数据模型和徏模方法研IӞ忽视了对行ؓ的设?br />   如图Q?br /> </p> <p align="center"><img src="http://www.itisedu.com/manage/Upload/image/2006327171322129.jpg" border="0" alt="" /></p> <p>           <br /> <strong>三、数据库设计Ҏq?/strong> <br />   手工试凑?br />    设计质量与设计h员的l验和水qx直接关系<br />    ~ZU学理论和工E方法的支持Q工E的质量难以保证<br />    数据库运行一D|间后常常又不同程度地发现各种问题Q增加了l护代h<br />   规范设计?br />    手工设计?br />    基本思想<br />   q程q代和逐步求精<br />   规范设计?l?<br />   典型ҎQ?br />   (1)新奥良QNew OrleansQ方法:数据库设计分ؓ四个阶段<br />     S.B.YaoҎQ将数据库设计分Z个步?br />     I.R.PalmerҎQ把数据库设计当成一步接一步的q程<br />   (2)计算助设?br />     <a target="_new">ORACLE</a> Designer 2000<br />     <a target="_new">SYBASE</a> PowerDesigner</p> <p><strong>四、数据库设计的基本步?/strong><br />   数据库设计的q程(六个阶段) <br />    1.<a target="_new">需求分?/a>阶段<br />    准确了解与分析用户需求(包括数据与处理)<br />    是整个设计过E的基础Q是最困难、最耗费旉的一?br />   2.概念l构设计阶段<br />    是整个数据库设计的关?br />    通过对用户需求进行综合、归U与抽象QŞ成一个独立于具体<a target="_new">DBMS</a>?a target="_new">概念模型</a><br />   3.逻辑l构设计阶段<br />    概늻构{换ؓ某个DBMS所支持的数据模?br />    对其q行优化<br />   4.数据库物理设计阶D?br />    为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储l构和存取方法)<br />   5.数据库实施阶D?br />    q用DBMS提供的数据语a、工具及宿主语言Q根据逻辑设计和物理设计的l果<br />    建立数据库,~制与调试应用程序,l织数据入库Qƈq行试运?br />   6.数据库运行和l护阶段<br />    数据库应用系l经q试q行后即可投入正式运行?br />    ?a target="_new">数据库系l?/a>q行q程中必M断地对其q行评h、调整与修改<br />   设计特点:<br />    在设计过E中把数据库的设计和Ҏ据库中数据处理的设计紧密l合h这两个斚w的需求分析、抽象、设计、实现在各个阶段同时q行Q相互参照,怺补充Q以完善两方面的设计</p> <p>  设计q程各个阶段的设计描qͼ<br />   如图Q?br />           </p> <p align="center"><img src="http://www.itisedu.com/manage/Upload/image/2006327171351881.jpg" border="0" alt="" /></p> <p><br /> <strong>五、数据库各模式的Ş成过E?/strong><br />   1.需求分析阶D:l合各个用户的应用需?br />   2.概念设计阶段QŞ成独立于机器特点Q独立于各个DBMS产品的概忉|?E-R?<br />   3.逻辑设计阶段Q首先将E-R图{换成具体的数据库产品支持的数据模型,如关pL型,形成数据库逻辑模式Q然后根据用户处理的要求、安全性的考虑Q在基本表的基础上再建立必要?a target="_new">视图</a>(View)QŞ成数据的外模?br />   4.物理设计阶段Q根据DBMS特点和处理的需要,q行物理存储安排Q徏立烦引,形成数据库内模式 </p> <p><strong>六、数据库设计技?/strong></p> <p>  <strong>1. 设计数据库之前(需求分析阶D)</strong><br />   1) 理解客户需求,询问用户如何看待未来需求变化。让客户解释光求,而且随着开发的l箋Q还要经常询问客户保证其需求仍然在开发的目的之中?br />   2) 了解企业业务可以在以后的开发阶D节U大量的旉?br />   3) 重视输入输出?br />   在定义数据库表和字段需求(输入Q时Q首先应查现有的或者已l设计出的报表、查询和视图Q输出)以决定ؓ了支持这些输出哪些是必要的表和字Dc?br />   举例Q假如客户需要一个报表按照邮政编码排序、分D和求和Q你要保证其中包括了单独的邮政编码字D而不要把邮政~码p进地址字段里?br />   4) 创徏数据字典和ER 图表<br />   ER 图表和数据字典可以让M了解数据库的人都明确如何从数据库中获得数据。ER囑֯表明表之间关pd有用Q而数据字典则说明了每个字D늚用途以及Q何可能存在的别名。对<a target="_new">SQL</a> 表达式的文档化来说这是完全必要的?br />   5) 定义标准?a target="_new">对象</a>命名规范<br />   数据库各U对象的命名必须规范?/p> <p> <strong> 2. 表和字段的设计(数据库逻辑设计Q?/strong><br />   表设计原?br />   1) 标准化和规范?br />   数据的标准化有助于消除数据库中的数据冗余。标准化有好几种形式Q但Third Normal FormQ?a target="_new">3NF</a>Q通常被认为在性能、扩展性和数据完整性方面达C最好^衡。简单来_遵守3NF 标准的数据库的表设计原则是:“One Fact in One Place”x个表只包括其本n基本的属性,当不是它们本w所h的属性时需q行分解。表之间的关p通过外键相连接。它h以下特点Q有一l表专门存放通过键连接v来的兌数据?br />   举例Q某个存攑֮户及其有兛_单的3NF 数据库就可能有两个表QCustomer 和Order。Order 表不包含定单兌客户的Q何信息,但表内会存放一个键|该键指向Customer 表里包含该客户信息的那一行?br />   事实上,Z效率的缘故,对表不进行标准化有时也是必要的?br />   2) 数据驱动<br />   采用数据驱动而非编码的方式Q许多策略变更和l护都会方便得多Q大大增强系l的灉|性和扩展性?br />   举例Q假如用L面要讉K外部数据源(<a target="_new">文g</a>?a target="_new">XML</a> 文档、其他数据库{)Q不妨把相应的连接和路径信息存储在用L面支持表里。还有,如果用户界面执行<a target="_new">工作?/a>之类的Q务(发送邮件、打CW、修改记录状态等Q,那么产生工作的数据也可以存攑֜数据库里。角色权限管理也可以通过数据驱动来完成。事实上Q如果过E是数据驱动的,你就可以把相当大的责Ll用Pqhl护自己的工作流q程?br />   3) 考虑各种变化<br />   在设计数据库的时候考虑到哪些数据字D将来可能会发生变更?br />   举例Q姓氏就是如此(注意是西方h的姓氏,比如x结婚后从夫姓等Q。所以,在徏立系l存储客户信息时Q在单独的一个数据表里存储姓氏字D,而且q附加v始日和终止日{字D,q样可以跟t这一数据条目的变化?/p> <p><br />   字段设计原则<br />   4) 每个表中都应该添加的3 个有用的字段<br /> dRecordCreationDateQ在VB 下默认是Now()Q而在<a target="_new">SQL Server</a>   • 下默认ؓGETDATE()<br /> sRecordCreatorQ在SQL Server 下默认ؓNOT NULL DEFAULT   • USER<br /> nRecordVersionQ记录的版本标记Q有助于准确说明记录中出现null 数据或者丢失数据的原因   •<br />   5) 对地址和电话采用多个字D?br />   描述街道地址q短一行记录是不够的。Address_Line1、Address_Line2 和Address_Line3 可以提供更大的灵zL。还有,电话L和邮件地址最好拥有自q数据表,光h自n?a target="_new">cd</a>和标记类别?br />   6) 使用角色实体定义属于某类别的?br />   在需要对属于特定cd或者具有特定角色的事物做定义时Q可以用角色实体来创建特定的旉兌关系Q从而可以实现自我文档化?br />   举例Q用PERSON 实体和PERSON_<a target="_new">TYPE</a> 实体来描qCh员。比方说Q当John Smith, Engineer 提升为John Smith, Director 乃至最后爬到John Smith, CIO 的高位,而所有你要做的不q是改变两个表PERSON 和PERSON_TYPE 之间关系的键|同时增加一个日?旉字段来知道变化是何时发生的。这P你的PERSON_TYPE 表就包含了所有PERSON 的可能类型,比如Associate、Engineer、Director、CIO 或者CEO {。还有个替代办法是改变PERSON 记录来反映新头衔的变化,不过q样一来在旉上无法跟t个人所处位|的具体旉?br />   7) 选择数字cd和文本类型尽量充?br />   在SQL 中用smallint 和tinyint cd要特别小心。比如,假如想看看月销售总额Q总额字段cd是smallintQ那么,如果总额过?32,767 ׃能进行计操作了?br />   而ID cd的文本字D,比如客户ID 或定单号{等都应该设|得比一般想象更大。假讑֮户ID ?0 位数ѝ那你应该把数据库表字段的长度设?2 或?3 个字W长。但q额外占据的I间却无需来<a target="_new">重构</a>整个数据库就可以实现数据库规模的增长了?br />   8) 增加删除标记字段<br />   在表中包含一?#8220;删除标记”字段Q这样就可以把行标记为删除。在关系数据库里不要单独删除某一行;最好采用清除数据程序而且要仔l维护烦引整体性?</p> <p> <strong> 3. 选择键和索引Q数据库逻辑设计Q?/strong><br />   键选择原则Q?br />   1) 键设? 原则<br /> 为关联字D创建外键?  •<br /> 所有的键都必须唯一?  •<br /> 避免使用复合键?  •<br /> 外键L兌唯一的键字段?  •<br />   2) 使用pȝ生成的主?br />   设计数据库的时候采用系l生成的键作Z键,那么实际控制了数据库的烦引完整性。这P数据库和非h工机制就有效地控制了对存储数据中每一行的讉K。采用系l生成键作ؓ主键q有一个优点:当拥有一致的键结构时Q找到逻辑~陷很容易?br />   3) 不要用用L?不让主键h可更新?<br />   在确定采用什么字D作的键的时候,可一定要心用户要~辑的字Dc通常的情况下不要选择用户可编辑的字段作ؓ键?br />   4) 可选键有时可做主键<br />   把可选键q一步用做主键,可以拥有建立强大索引的能力?/p> <p><br />   索引使用原则Q?br />   索引是从数据库中获取数据的最高效方式之一?5%的数据库性能问题都可以采用烦引技术得到解冟?br />   1) 逻辑主键使用唯一的成l烦引,对系l键Q作为存储过E)采用唯一的非成组索引Q对M外键列采用非成组索引。考虑数据库的I间有多大,表如何进行访问,q有q些讉K是否主要用作d?br />   2) 大多数数据库都烦引自动创建的主键字段Q但是可别忘了烦引外键,它们也是l常使用的键Q比如运行查询显CZ表和所有关联表的某条记录就用得上?br />   3) 不要索引memo/note 字段Q不要烦引大型字D(有很多字W)Q这样作会让索引占用太多的存储空间?br />   4) 不要索引常用的小型表<br />   不要为小型数据表讄M键,假如它们l常有插入和删除操作更别这样作了。对q些插入和删除操作的索引l护可能比扫描表I间消耗更多的旉?/p> <p><strong>  4. 数据完整性设计(数据库逻辑设计Q?/strong><br />   1) 完整性实现机Ӟ<br />   实体完整性:主键<br />   参照完整性:<br />   父表中删除数据:U联删除Q受限删除;|空?br />   父表中插入数据:受限插入Q递归插入<br />   父表中更新数据:U联更新Q受限更斎ͼ|空?br />   DBMS对参照完整性可以有两种Ҏ实现Q外键实现机ӞU束规则Q和触发器实现机?br />   用户定义完整性:<br />   NOT NULLQCHECKQ触发器<br />   2) 用约束而非商务规则强制数据完整?br />   采用数据库系l实现数据的完整性。这不但包括通过标准化实现的完整性而且q包括数据的功能性。在写数据的时候还可以增加触发器来保证数据的正性。不要依赖于商务层保证数据完整性;它不能保证表之间Q外键)的完整性所以不能强加于其他完整性规则之上?br />   3) 强制指示完整?br />   在有x据进入数据库之前其剔除。激zL据库pȝ的指C完整性特性。这样可以保持数据的清洁而能q开发h员投入更多的旉处理错误条g?br />   4) 使用查找控制数据完整?br />   控制数据完整性的最x式就是限制用L选择。只要有可能都应该提供给用户一个清晰的价值列表供光择。这样将减少键入代码的错误和误解同时提供数据的一致性。某些公共数据特别适合查找Q国家代码、状态代码等?br />   5) 采用视图<br />   Z在数据库和应用程序代码之间提供另一层抽象,可以为应用程序徏立专门的视图而不必非要应用程序直接访问数据表。这样做q等于在处理数据库变更时l你提供了更多的自由?/p> <p><strong>  5. 其他设计技?/strong><br />   1) 避免使用触发?br />   触发器的功能通常可以用其他方式实现。在调试E序时触发器可能成ؓq扰。假如你实需要采用触发器Q你最好集中对它文档化?br />   2) 使用常用pQ或者其他Q何语aQ而不要用编?br />   在创Z拉菜单、列表、报表时最好按照英语名排序。假如需要编码,可以在编码旁附上用户知道的英语?br />   3) 保存常用信息<br />   让一个表专门存放一般数据库信息非常有用。在q个表里存放数据库当前版本、最q检?修复Q对AccessQ、关联设计文档的名称、客L信息。这样可以实CU简单机制跟t数据库Q当客户抱怨他们的数据库没有达到希望的要求而与你联pLQ这样做寚w客户?服务器环境特别有用?br />   4) 包含版本机制<br />   在数据库中引?a target="_new">版本控制</a>机制来确定用中的数据库的版本。时间一长,用户的需求L会改变的。最l可能会要求修改数据库结构。把版本信息直接存放到数据库中更为方ѝ?<br />   5) ~制文档<br />   Ҏ有的快捷方式、命名规范、限制和函数都要~制文档?br />   采用l表、列、触发器{加注释的数据库工具。对开发、支持和跟踪修改非常有用?br />   Ҏ据库文档化,或者在数据库自w的内部或者单独徏立文档。这P当过了一q多旉后再回过头来做第2 个版本,犯错的机会将大大减少?br />   6) 试、测试、反复测?br />   建立或者修订数据库之后Q必ȝ用户新输入的数据试数据字段。最重要的是Q让用户q行试q且同用户一道保证选择的数据类型满_业要求。测试需要在把新数据库投入实际服务之前完成?br />   7) 查设?br />   在开发期间检查数据库设计的常用技术是通过其所支持的应用程序原型检查数据库。换句话_针对每一U最l表达数据的原型应用Q保证你查了数据模型q且查看如何取出数据?br /> <br /> <font color="#f70938"><font face="黑体"><a target="_new">中科永联</a>高技术培训中心(</font><font face="黑体">www.itisedu.com</font></font>)</p> <img src ="http://www.tkk7.com/SIDNEY/aggbug/143928.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/SIDNEY/" target="_blank">渠上?/a> 2007-09-10 11:21 <a href="http://www.tkk7.com/SIDNEY/archive/2007/09/10/143928.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何UdSQL Server Tempdb和Master数据?/title><link>http://www.tkk7.com/SIDNEY/archive/2007/08/30/141229.html</link><dc:creator>渠上?/dc:creator><author>渠上?/author><pubDate>Thu, 30 Aug 2007 03:00:00 GMT</pubDate><guid>http://www.tkk7.com/SIDNEY/archive/2007/08/30/141229.html</guid><wfw:comment>http://www.tkk7.com/SIDNEY/comments/141229.html</wfw:comment><comments>http://www.tkk7.com/SIDNEY/archive/2007/08/30/141229.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/SIDNEY/comments/commentRss/141229.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/SIDNEY/services/trackbacks/141229.html</trackback:ping><description><![CDATA[<h1 class=headtit><a target=_blank><u><font color=#0000ff>开发者在U?Builder.com.cn</font></u></a> 更新旉:<cite>2007-08-15</cite>作者:<span>开发者在U?/span> 来源:开发者在U?/h1> <h2 class=headkeyw>本文关键词: <a target=_blank><u><font color=#0000ff>Steven Warren</font></u></a> <a target=_blank><u><font color=#0000ff>数据?/font></u></a> <a target=_blank><u><font color=#0000ff>Tempdb</font></u></a> <a target=_blank><u><font color=#0000ff>Master</font></u></a> <a target=_blank><u><font color=#0000ff>SQL Server</font></u></a> </h2> <div id="dbtt3x5" class=artl_con> <p>我发Cؓ了提高性能,我们l常需要将数据库和日志文gUdC同的驱动器上。当要移动典型的用户数据库到一个不同的驱动器上以提高性能或拆分日志时Q只要运行sp_detach 和sp_attach来执行移动即可。然而,当涉及到Master和Tempdb数据库的UdӞ要用不同的规则。本文,我们向大家介绍Udq些数据库的q程?/p> <p><strong>UdMaster</strong><strong>数据?/strong></p> <p>q去Q我曄master数据库的日志文gUdC个不同的驱动器上。如果你也需要执行这个操作,按照下面的规则可以让你成功完成移动操作。首先,叛_企业理器中的SQL Serverq择属性。然后,单击开始参?a target=_blank><u><font color=#0000ff>如图A</font></u></a>所C。正如我们在图A中所看到的,有以下参数出现在对话框中Q?/p> <p>-d 是指保存master数据库数据文件的路径全名?/p> <p>-e 是指保存错误日志文g的\径名?/p> <p>-l 是指保存master数据库日志文件的路径全名?/p> <p>现在Q如果你要移动文Ӟ那么需要移除当前入口ƈ利用正确的\径重新创建新入口。例如,我们打算Master数据库日志文件移动到QC:TestQ。这L话,我们会通过H出高亮昄旧参数ƈ选择U除来删?l [path]Q如<a ><u><font color=#0000ff>图B</font></u></a>所C)。然后,我们会d下面的入口(?a ><u><font color=#0000ff>图C</font></u></a>Q?l (c:Testmastlog.ldf)q单Mơ确定。现在,会停止SQL Serverq将mastlog.ldfUd到新位置?/p> <p>注意Q请务必保mastlog.ldfUd到在开始参C配置的位|。如果移动到了一个未在开始参C指明的位|,SQL Server不能启动?/p> <p>最后,开启SQL Server,你已l成功地Ud了Master数据库,?a ><u><font color=#0000ff>图D</font></u></a>所C?/p> <p><strong>UdTempdb</strong></p> <p>ZUdtempdb数据库,需要打开查询分析器ƈq行下面的查询:</p> <p>Alter database tempdb modify file (name = tempdev, filename = ‘E:Sqldata empdb.mdf’) </p> <p>go </p> <p>Alter database tempdb modify file (name = templog, filename = ‘E:Sqldata emplog.ldf’) </p> <p>Go </p> <p>要指定的filename=参数取决于要TempdbUdC处。我们将templogUd?c:est)如图E所C。运行完查询后,重vSQL Server删除旧文件?strong> </strong></p> <p><strong>UdMSDB</strong><strong>数据?/strong></p> <p>UdMSDB和Model数据库,按照下面的步骤进行。首先,叛_SQL-Server名ƈ单击属性。在通用选项卡中Q选择你的开始参数。然后,输入参数-T3608。单ȝ定,停止q起SQL Server。重起之后,分离数据库ƈ它们移动到合适的位置?/p> <p>无论何时Q当你的驱动器空间变得紧张ƈ需要移动你的系l数据库文gC同的驱动器上Ӟ按照本文介绍的这些简单操作步骤执行,你将会高效的Ud数据库ƈ保证完整性?/p> </div> <img src ="http://www.tkk7.com/SIDNEY/aggbug/141229.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/SIDNEY/" target="_blank">渠上?/a> 2007-08-30 11:00 <a href="http://www.tkk7.com/SIDNEY/archive/2007/08/30/141229.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C# Windows 应用E序中实?SQL Server 2005 查询通知http://www.tkk7.com/SIDNEY/archive/2007/08/15/136829.html渠上?/dc:creator>渠上?/author>Wed, 15 Aug 2007 02:08:00 GMThttp://www.tkk7.com/SIDNEY/archive/2007/08/15/136829.htmlhttp://www.tkk7.com/SIDNEY/comments/136829.htmlhttp://www.tkk7.com/SIDNEY/archive/2007/08/15/136829.html#Feedback0http://www.tkk7.com/SIDNEY/comments/commentRss/136829.htmlhttp://www.tkk7.com/SIDNEY/services/trackbacks/136829.html作?/span>  Balamurali Balaji MVP
注意Q这文章是由无人工介入的自动的机器译pȝ译完成。这些文章是微YZ懂英语的用户提供? 以他们能够理解q些文章的内宏V微软不保证机器译的正度Q也不对׃内容的误译或者客户对它的使用所引v的Q何直接的, 或间接的可能的问题负责?/div>
文章~号 : 555893
最后修?/td> : 2007q??7?/td>
修订 : 1.0

概要

本文解释如何?C# H口应用E序中实?SQL SERVER 2005 查询通知服务?本文中提供示例代码与 Visual Studio 2005 ?SQL Server Management Studio 2005?/em>

回到端

症状

?

查询通知是功能允许应用程序要数据已更Ҏ通知 Microsoft SQL Server 2005 中?它主要用于存储数据库中数据的~存q获取刷新ƈ通知客户应用 everytime 中数据库中数据更改应用程序?br>
ASP.NET 2.0 中开发已l熟悉自?Web 应用E序?SQL 数据~冲Z < A0 > SqlCacheDependency < / A0 > cM用?如由 System.Data.SqlClient 命名I间?SqlDependency cL供本文处理高U实现?它提供之间窗口应用程序和 SQLServer, 使您可以使用相关性来服务器中更改简单和一通知功能?它有效地利用 SQL Server 2005 通知功能Ҏ客户应用程序?ADO.NET?br>
SQL Server 2005 ?ADO.NET Windows 应用E序可以?SQLServer 发送命令, h生成通知如果执行同一 SQL 命o生成结果集与最初检索不同?查询通知是受数据?Service Broker 事g和队列机制?br>

回到端

原因

中实现查询通知 step-By-Step Ҏ 的整个过E是接收h通知q程之间客户H口应用E序?SQL Server 2005 是五个小步骤中完成如下:

1) 数据库是问题必须配置为启用查询通知服务?br>
Z安全原因, SQL Server 2005 数据库没有默认启?ServiceBroker?要启用查询通知Ҏ据库, SQL SERVER 2005 MAnagement VisualStudio, 查询H口, 中运行以下命令:

ALTER DATABASE SET ENABLE_BROKER;

我在本文, 使用 AdvtDB ?br>
ALTER DATABASE AdvtDB SET ENABLE_BROKER;

2) 用户必须h正确客户和服务器端权限来hq接攉知?br>谁执行请求通知必须h SUBSCRIBEQUERYNOTIFICATIONS 数据库权限对?server.Client - 代码部分信Q情况中运行命令用戯?SqlClientPermission?



专用 bool EnoughPermission()
{
        
SqlClientPermission perm = ?SqlClientPermission.System.Security.permissions.PermissionState.unrestricted;)
   试
   {
       perm.demand();
       q回 true Q?br>   } 
   catch (System.Exception)
   {
       q回 false Q?br>   }
}

3) 使用 SqlCommand 对象来执行与一个关联通知 objectùSqlDependency 有效 SELECT 语句?br>

SqlDependency 对象 Q?查询通知 API 提供 SqlDependency 对象来处理通知?使用 SqlDependency, ServiceBroker 对象, 例如通知队列, 预定义?它与它们发布到队列自动启动辅助线E以处理通知 Q?它还分析 ServiceBroker 消息, 公开信息作ؓ事g参数数据?必须通过调用开始方法来建立相关性到数据库初始化 SqlDependency?q是静态方法需要ؓ每个数据库连接需要应用初始化期间调用一ơ?对于每个依赖q接q行应用E序l止上应调用 Stop Ҏ?br>
建立数据库连接?SqlDependency 收听通知服务已启动ƈ DataGridView 控g昄与当前结果返回由命o对象执行查询 Click 的按? 上?br>

        专用 void button1_Click(object sender, EventArgs e)
        {

            / / 删除M现有相关性连? 然后创徏一个新的?br>            connstr = 数据?" IntegratedSecurity; 初始目录 " = localhost; = SSPI Q?= AdvtDB;
            字符?ssql = 选择 " ?advt; * "

            SqlDependency.Stop(connstr);
            SqlDependency.start(connstr);
            如果 () q接 = = null
                q接 = ?SqlConnection(connstr);
            如果 () 命o = = null
                命o = ?SqlCommand ssql, q接);
            如果 () myDataSet = = null
                myDataSet = ?DataSet();
            GetAdvtData();
        }

GetAdvtData() ?Helper 函数创徏命o对象实例Q?其?SqlDependency 对象兌?注意 SqlDependency 对象?OnChange 事g通知客户数据库中已进行更改ƈ负责其 eventhandler dependency_OnChange 的接攉分的通知?br>
        专用 void GetAdvtData()
        {
            myDataSet.clear();
            / / 保命o对象没有通知对象?br>            command.Notification = null;
            / / 创徏q绑定到命o对象 SqlDependency 对象?br>            SqlDependency 相关?= ?SqlDependency(command);
            dependency.OnChange += ?OnChangeEventHandler(dependency_OnChange);

            使用 (SqlDataAdapter 适配?= ?SqlDataAdapter(command))
            {
                adapter.Fill (myDataSet, " Advt ");
                dataGridView1.DataSource = myDataSet;
                dataGridView1.DataMember = " advt ";
            }
        }

4) 提供代码以处理通知时而且被监视数据更攏V?br>
辅助U程q程装 OnChange 事g处理E序q且因此, UI changes(updating the datagrid, displaying the status message) 位于ȝE不可能讉K此处?创徏另一个委托线E?UIDelegate 执行q些dq让
?OnChange 事g?SqlDependency 对象删除辅助U程只处理程序?br>
       委派 void UIDelegate();
       专用 void dependency_OnChange (object sender, SqlNotificationEventArgs e)
        {
            UIDelegate uidel = ?UIDelegate(RefreshData);
            This.invoke (uidel, null);

            //Remove 情Ş处理E序用于一个通知?br>            SqlDependency 相关?= (SqlDependency) 发送?
            dependency.OnChange -= dependency_OnChange;
        }
        专用 void RefreshData()
        {
            / / ׃, UI U程上执行代码可以安全地更新 UI?br>
            label1.Text = " 数据库有一些更改和|格中应?";

            / / 加蝲数据集绑定到|格?br>            GetAdvtData();
        }

5) 停止 SqlDependency NotificationServices 退?application.In form_closing 事gӞ 包含用于停止 SqlDepenency 通知侦听器服务代码?br>

        专用 void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            SqlDependency.Stop(connstr);
            如果 () q接 = null !
                Connection.Close();
        }

下面是声明该E序中用?br>
        专用 const 字符?statusMessage; 
        专用 DataSet myDataSet = null;
        专用 SqlConnection q接 = null;
        专用 SqlCommand 命o = null;
        U有字符?connstr;



回到端

解决Ҏ

试应用E序
q行刚刚按照上述步骤创徏 VisualC # Windows 应用E序?当窗体显C? "-单击该按钮ƈ注意 datagridview 控g被填充?

现在, 打开查询H口?SQL Server Management d? 和插入行或更新关注表中列?切换回您q行应用E序, C# 时可能看到数据网D图中出现更改?br>


]]>SQL Server 2005 查询计划指南http://www.tkk7.com/SIDNEY/archive/2007/08/15/136827.html渠上?/dc:creator>渠上?/author>Wed, 15 Aug 2007 02:05:00 GMThttp://www.tkk7.com/SIDNEY/archive/2007/08/15/136827.htmlhttp://www.tkk7.com/SIDNEY/comments/136827.htmlhttp://www.tkk7.com/SIDNEY/archive/2007/08/15/136827.html#Feedback0http://www.tkk7.com/SIDNEY/comments/commentRss/136827.htmlhttp://www.tkk7.com/SIDNEY/services/trackbacks/136827.html 

 

 使用背景

   1 应用E序数据库查询性能低下Q而我们又无法获得源代码来修改查询文本

   2 我们不希望直接更Ҏ询文本而又要提高查询性能

 

?/span>  基本介绍Q?/span>

   SQL Server 2005引入了称?/span>计划指南的新Ҏ,可以帮我们解决上q问题。本质上Q计划指南是通过查询提C附加到计划指南来媄响查询的优化?/span>

 

?/span>  q作原理Q?/span>

1Q?/span> 当应用程序向Sql Server发送代码,查询优化器首先检查在~存中是否有一个适当的询问计划,如果有,查询按被找到的查询计划执行?/span>

2Q?/span> 如果没有匚w的查询计划,代码被与一个称为内部查寻表(lookup table)比较, 看是否有一个已存在的计划指南与之匹?/span>

3Q?/span> 如果在第2步找到匹配的计划指南Q询问优化器修Ҏ代码以包括计划指南中查询提示。源代码中之前的M查询提示被新提C替?/span>

4Q?/span> 查询计划被~译和缓?/span>

5Q?/span> 查询按照你之前在计划指南设定的查询提示执行?/span>

 

?/span>  计划指南的分c:

有三U方式的计划指南Q?/span>

1Q?/span>OBJECT 计划指南Q与?/span> Transact-SQL 存储q程、标量函数、多语句表值函数和 DML 触发器的上下文中执行的查询匹配?/span>

2Q?/span>SQL 计划指南Q与在独立的 Transact-SQL 语句和批处理Q不属于数据库对象)的上下文中执行的查询匚w。基?/span> SQL 的计划指南还可用于与参数化ؓ指定形式的查询匹配?/span>SQL 计划指南适用于应用程序?/span> sp_executesql pȝ存储q程频繁提交的语句和批处理?/span>

3Q?/span>TEMPLATE 计划指南Q与参数化ؓ指定形式的独立查询匹配。这些计划指南用于覆盖查询类的数据库的当?/span> PARAMETERIZATION 数据?/span> SET 选项?/span>TEMPLATE 计划指南用于覆盖特定查询形式的参数化行ؓ。您可以在以下Q一情况下创?/span> TEMPLATE 计划指南Q?/span>

 

?/span>  可以在计划指南用中的查询提C?/span>Q?/font>

{HASH | ORDER} GROUP

{CONCAT | HASH | MERGE} UNION

{LOOP | MERGE | HASH} JOIN

FAST number_rows

FORCE ORDER

MAXDOP number_of_processors

OPTIMIZE FOR ( @variable_name = literal_constant ) [ ,…n ]

RECOMPILE

ROBUST PLAN

KEEP PLAN

KEEPFIXED PLAN

EXPAND VIEWS

MAXRECURSION number

USE PLAN <xmlplan>

 

?/span>  使用CZQ?/span>

   以下二个存储q程创造和处理计划指南

sp_create_plan_guide

sp_control_plan_guide

 

1Q?/font> sp_create_plan_guide

创徏用于查询提CZ数据库中的查询进行关联的计划指南

语法Q?/font>

sp_create_plan_guide [ @name = ] N'plan_guide_name'
     , [ @stmt = ] N'statement_text'
     , [ @type = ] N'{ OBJECT | SQL | TEMPLATE }'
     , [ @module_or_batch = ]
       {
                    N'[ schema_name. ] object_name'
          | N'batch_text'
          | NULL
        }
     , [ @params = ] { N'@parameter_name data_type [ ,...n ]' | NULL }
     , [ @hints = ] { N'OPTION ( query_hint [ ,...n ] )' | NULL }

 

CZ

sp_create_plan_guide

@name = N'PlanGuideTest',

@stmt = N'SELECT COUNT(*) AS Total

FROM Sales.SalesOrderHeader h, Sales.SalesOrderDetail d

WHERE h.SalesOrderID = d.SalesOrderID and h.OrderDate

BETWEEN ''1/1/2000'' AND ''1/1/2005'' ',

@type = N'SQL',

@module_or_batch = NULL,

@params = NULL,

@hints = N'OPTION (MERGE JOIN)'

GO

 

代码的运作原?/font>

@name = N'PlanGuideTest'

指定计划指南的名UCؓ PlanGuide1

 

@stmt = N'SELECT COUNT(*) AS Total FROM Sales.SalesOrderHeader h, Sales.SalesOrderDetail d WHERE h.SalesOrderID = d.SalesOrderID and h.OrderDate
BETWEEN "1/1/2000" AND "1/1/2005" '

q段代码是询问优化器应该匚w的代码?/span> 无论应用E序何时向服务器发送这D代码,询问优化器设法匹配代码。当发现代码和上面列出的匚wӞ查询优化器在内部查询?/span>(loolup table)中查找正的计划指南Qƈq用计划指南

 

@type = N'SQL',

说明计划指南的类型,q是一?/span> SQL 计划指南

 

@module_or_batch = NULL,

q个代码行用于指?/span>statement_text对象的名?/span>,仅在计划指南cd?/span>OBJECT 计划指南旉?/span>

 

@params = NULL,

指定嵌入 statement_text 中的所有参数的定义Q在Template 计划指南cd旉?/span>

 

@hints = N'OPTION (MERGE JOIN)'

指定?/span> OPTION 子句附加C @stmt 匚w的查询上

 

 

2Q?/span>sp_control_plan_guide

删除、启用或用计划指南?/font>

语法

sp_control_plan_guide [ @operation = ] N'<control_option>' [ , [ @name = ]
     N'plan_guide_name' ]

<control_option>::=

{

 DROP          --删除?/span>plan_guide_name 指定的计划指?/span>

 | DROP ALL     --删除当前数据库中的所有计划指?/span>

 | DISABLE      --用?/span>plan_guide_name 指定的计划指?/span>

 | DISABLE ALL  --用当前数据库中的所有计划指?/span>

 | ENABLE       --启用?/span>plan_guide_name 指定的计划指?/span>

 | ENABLE ALL   --启用当前数据库中的所有计划指?/span>

 

下面是有些例子的是怎样使用q个存储q程

sp_control_plan_guide N'DROP', N'PlanGuideTest'
sp_control_plan_guide N'DISABLE', N'PlanGuideTest'
sp_control_plan_guide N'ENABLE', N'PlanGuideTest'

 

        注: 如果您设法删除﹑修改H一个涉及到计划指南的存储过E﹑函数H或DML触发器, 它系l将报错?/span> 必须先删除计划指?/span>?/span>

 

3Q查看计划指?/span>

可以使用sys.plan_guides目录视图查看数据库中的计划指?/span>

SELECT * FROM sys.plan_guides

 

    

?/span>  使用事g探查器验证是否执行计划指南:

 1. 启动事g探查?/span> 跟踪Q选中性能”->”Showplan XML” 事gcd?/span>

2. q行查询

3. ?/span> Showplan XML 事g中查扑֏影响的查询?/span>

4. 如果计划指南的类型ؓ OBJECT ?/span> SQLQ则验证 Showplan XML 事g是否包含您希望与查询匚w的计划指南的 PlanGuideDB ?/span> PlanGuideName 属性。或者,如果计划指南的类型ؓ TEMPLATEQ则验证 Showplan XML 事g是否包含预期计划指南?/span> TemplatePlanGuideDB ?/span> TemplatePlanGuideName 属性。这可以验证计划指南是否在运行。这些属性包含在计划?/span> <StmtSimple> 元素下?/span>

 

 

?/span>  计划指南通常使用的情况:

1Q?/span> 在参数化的查询中增加OPTIMIZE FOR or RECOMPILE 询提C?/span>

2Q?/span> ?/span>USE PLAN查询提示强制使用更好的查询计?/span>

3Q?/span> 非ƈ行查询?/span>MAXDOP查询提示

4Q?/span> 强制join查询试验join查询提示

5Q?/span> 删除Q修改,替代现有的查询提C?/span>

 

?/span>  最佛_践:

    1Q?/span> 计划指南的作用域是创些计划指南所用的数据?/span>

2Q?/span> 计划指南需要有l验?/span>DBA才能使用

3Q?/span> 如果没有其他Ҏ来解x询效率问题,请用一个计划指?/span>

4Q?/span> 计划指南需l过试才正式?/span>

5Q?/span> Sql Server版本涉及或打SP补丁后,需要重新评估计划指南的效率Q以定是否l箋使用计划指南

 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1505218



]]>
数据库行转列的算?/title><link>http://www.tkk7.com/SIDNEY/archive/2007/08/14/136678.html</link><dc:creator>渠上?/dc:creator><author>渠上?/author><pubDate>Tue, 14 Aug 2007 06:53:00 GMT</pubDate><guid>http://www.tkk7.com/SIDNEY/archive/2007/08/14/136678.html</guid><wfw:comment>http://www.tkk7.com/SIDNEY/comments/136678.html</wfw:comment><comments>http://www.tkk7.com/SIDNEY/archive/2007/08/14/136678.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/SIDNEY/comments/commentRss/136678.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/SIDNEY/services/trackbacks/136678.html</trackback:ping><description><![CDATA[<p>--各合作机构自q初以来每周报告数量</p> <p> </p> <p>select  b.f0010 jg,datepart(ww,a.creat_tm) zc,count(*) cnt into #t </p> <p> </p> <p>from RPT_D_BSC a,RPT_R_ORG b</p> <p> </p> <p>where b.f0040='4' and a.creat_tm>'2007-01-01' and a.org_cl=b.org_cl</p> <p> </p> <p>group by b.f0010,datepart(ww,a.creat_tm)</p> <p> </p> <p>order by b.f0010,datepart(ww,a.creat_tm)</p> <p> </p> <p>declare @sql varchar(8000) </p> <p> </p> <p>set @sql = 'select jg as ' + '姓名' </p> <p> </p> <p>select @sql = @sql + ', isnull(sum(case zc when ''' + cast(zc as varchar(2)) + ''' then cnt end),0) [' + cast(zc as varchar(2)) + ']' </p> <p>from (select distinct zc from #t) as a </p> <p>order by zc</p> <p><br>set @sql = @sql + 'from #t group by jg order by jg' </p> <p>--print @sql  </p> <p>exec(@sql) </p> <img src ="http://www.tkk7.com/SIDNEY/aggbug/136678.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/SIDNEY/" target="_blank">渠上?/a> 2007-08-14 14:53 <a href="http://www.tkk7.com/SIDNEY/archive/2007/08/14/136678.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>中?/title><link>http://www.tkk7.com/SIDNEY/archive/2007/08/13/136453.html</link><dc:creator>渠上?/dc:creator><author>渠上?/author><pubDate>Mon, 13 Aug 2007 09:46:00 GMT</pubDate><guid>http://www.tkk7.com/SIDNEY/archive/2007/08/13/136453.html</guid><wfw:comment>http://www.tkk7.com/SIDNEY/comments/136453.html</wfw:comment><comments>http://www.tkk7.com/SIDNEY/archive/2007/08/13/136453.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/SIDNEY/comments/commentRss/136453.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/SIDNEY/services/trackbacks/136453.html</trackback:ping><description><![CDATA[<strong>在中间的中?br></strong>      中值通常是被用作分析目的来确定在一个分发里的中间值的一个统计计倹{中值的计算会取决于值的输入集是否包含一个奇数或偶数个数的元素而不同。当你有一个奇C数的元素Qƈ且按旉序值排序时Q中值是中间的倹{例如:如果你有q个数值集合{30Q?0Q?0}Qƈ且把它们按时间顺序排序,中值是30Q{10Q?0Q?0}的中间|。在一个偶C数的元素里(仍然是按旉序排序Q,中值是两个中间的值的q_倹{例如:假设有数值集合{30Q?0Q?0Q?0}Q那么中值是20Q?0?0的^均|? <img src ="http://www.tkk7.com/SIDNEY/aggbug/136453.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/SIDNEY/" target="_blank">渠上?/a> 2007-08-13 17:46 <a href="http://www.tkk7.com/SIDNEY/archive/2007/08/13/136453.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>表变量和临时?/title><link>http://www.tkk7.com/SIDNEY/archive/2007/08/13/136382.html</link><dc:creator>渠上?/dc:creator><author>渠上?/author><pubDate>Mon, 13 Aug 2007 06:55:00 GMT</pubDate><guid>http://www.tkk7.com/SIDNEY/archive/2007/08/13/136382.html</guid><wfw:comment>http://www.tkk7.com/SIDNEY/comments/136382.html</wfw:comment><comments>http://www.tkk7.com/SIDNEY/archive/2007/08/13/136382.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/SIDNEY/comments/commentRss/136382.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/SIDNEY/services/trackbacks/136382.html</trackback:ping><description><![CDATA[基本原则Q能用表变量q表变量。实在不行才使用临时表?br><strong>如与动态语句结合、外部需要用等Q就需要时表</strong>?br><br>表变量主要开销pȝ的内存,而时表则用tempdb。对于小数据量的中间数据存储Q可以用表变量Q而当需要时保存的数据量很庞大Ӟ使用临时表。具体用表变量q是临时表,可以Ҏpȝ的运行状冉|调整?br><br><br> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://jierry.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">declare</span><span style="COLOR: #000000"> </span><span style="COLOR: #008000">@tb</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">table</span><span style="COLOR: #000000">(id </span><span style="FONT-WEIGHT: bold; COLOR: #000000">int</span><span style="COLOR: #000000">,name </span><span style="FONT-WEIGHT: bold; COLOR: #000000">varchar</span><span style="COLOR: #000000">(</span><span style="FONT-WEIGHT: bold; COLOR: #800000">50</span><span style="COLOR: #000000">),age </span><span style="FONT-WEIGHT: bold; COLOR: #000000">int</span><span style="COLOR: #000000">) </span><span style="COLOR: #008080">--</span><span style="COLOR: #008080">创徏表变?/span><span style="COLOR: #008080"><br><img src="http://jierry.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://jierry.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">insert</span><span style="COLOR: #000000"> </span><span style="COLOR: #008000">@tb</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">select</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #800000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">nn</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="FONT-WEIGHT: bold; COLOR: #800000">14</span><span style="COLOR: #000000"><br><img src="http://jierry.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">union</span><span style="COLOR: #000000"> </span><span style="COLOR: #808080">all</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">select</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #800000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">nn</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="FONT-WEIGHT: bold; COLOR: #800000">14</span><span style="COLOR: #000000"><br><img src="http://jierry.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://jierry.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">select</span><span style="COLOR: #000000"> </span><span style="COLOR: #808080">*</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">from</span><span style="COLOR: #000000"> </span><span style="COLOR: #008000">@tb</span><span style="COLOR: #000000"><br><img src="http://jierry.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://jierry.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://jierry.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://jierry.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://jierry.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">create</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">table</span><span style="COLOR: #000000"> #t(id </span><span style="FONT-WEIGHT: bold; COLOR: #000000">int</span><span style="COLOR: #000000">,name </span><span style="FONT-WEIGHT: bold; COLOR: #000000">varchar</span><span style="COLOR: #000000">(</span><span style="FONT-WEIGHT: bold; COLOR: #800000">50</span><span style="COLOR: #000000">),years </span><span style="FONT-WEIGHT: bold; COLOR: #000000">int</span><span style="COLOR: #000000">,nums </span><span style="FONT-WEIGHT: bold; COLOR: #000000">int</span><span style="COLOR: #000000">)</span><span style="COLOR: #008080">--</span><span style="COLOR: #008080">创徏临时?/span><span style="COLOR: #008080"><br><img src="http://jierry.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://jierry.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">insert</span><span style="COLOR: #000000"> #t </span><span style="COLOR: #0000ff">select</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #800000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">nn</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="FONT-WEIGHT: bold; COLOR: #800000">14</span><span style="COLOR: #000000">,</span><span style="FONT-WEIGHT: bold; COLOR: #800000">15</span><span style="COLOR: #000000"><br><img src="http://jierry.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">union</span><span style="COLOR: #000000"> </span><span style="COLOR: #808080">all</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">select</span><span style="COLOR: #000000"> </span><span style="FONT-WEIGHT: bold; COLOR: #800000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">nn</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,</span><span style="FONT-WEIGHT: bold; COLOR: #800000">14</span><span style="COLOR: #000000">,</span><span style="FONT-WEIGHT: bold; COLOR: #800000">15</span><span style="COLOR: #000000"><br><img src="http://jierry.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">insert</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">into</span><span style="COLOR: #000000"> #t  </span><span style="COLOR: #0000ff">exec</span><span style="COLOR: #000000"> sp_gets  </span><span style="COLOR: #008080">--</span><span style="COLOR: #008080">可以用于存储q程或动态SQLl合</span><span style="COLOR: #008080"><br><img src="http://jierry.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://jierry.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">select</span><span style="COLOR: #000000"> </span><span style="COLOR: #808080">*</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">from</span><span style="COLOR: #000000"> #t<br><img src="http://jierry.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">drop</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">table</span><span style="COLOR: #000000"> #t</span></div> <img src ="http://www.tkk7.com/SIDNEY/aggbug/136382.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/SIDNEY/" target="_blank">渠上?/a> 2007-08-13 14:55 <a href="http://www.tkk7.com/SIDNEY/archive/2007/08/13/136382.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SET NOCOUNT,SET ANSI_NULLS AND SET QUOTED_IDENTIFIERhttp://www.tkk7.com/SIDNEY/archive/2007/08/10/135745.html渠上?/dc:creator>渠上?/author>Fri, 10 Aug 2007 03:04:00 GMThttp://www.tkk7.com/SIDNEY/archive/2007/08/10/135745.htmlhttp://www.tkk7.com/SIDNEY/comments/135745.htmlhttp://www.tkk7.com/SIDNEY/archive/2007/08/10/135745.html#Feedback0http://www.tkk7.com/SIDNEY/comments/commentRss/135745.htmlhttp://www.tkk7.com/SIDNEY/services/trackbacks/135745.htmlSET  NOCOUNT

SET NOCOUNT
使返回的l果中不包含有关?Transact-SQL 语句影响的行数的信息?/p>

语法
SET NOCOUNT { ON | OFF }

注释
?SET NOCOUNT ?ON Ӟ不返回计敎ͼ表示?Transact-SQL 语句影响的行敎ͼ。当 SET NOCOUNT ?OFF Ӟq回计数?/p>

即?SET NOCOUNT ?ON Ӟ也更?@@ROWCOUNT 函数?/p>

?SET NOCOUNT ?ON Ӟ不l客L发送存储过E中的每个语句的 DONE_IN_PROC 信息。当使用 Microsoft SQL Server 提供的实用工h行查询时Q在 Transact-SQL 语句Q如 SELECT、INSERT、UPDATE ?DELETEQ结束时不会在查询l果中显C?nn rows affected"?/p>

如果存储q程中包含的一些语句ƈ不返回许多实际的数据Q则该设|由于大量减了|络量Q因此可显著提高性能?/p>

SET NOCOUNT 讄是在执行或运行时讄Q而不是在分析时设|?/p>

权限
SET NOCOUNT 权限默认授予所有用戗?/p>

l论Q我们应该在存储q程的头部加上SET NOCOUNT ON q样的话Q在退出存储过E的时候加?SET NOCOUNT OFFq样的话Q以辑ֈ优化存储q程的目的?/p>

多说两句Q?/p>

1Q在查看SqlServer的帮助的时候,要注?#8220;权限”q一节,因ؓ某些语句是需要一定的权限的,而我们往往忽略?/p>

2Q@@ROWCOUNT是返回受上一语句影响的行敎ͼ包括扑ֈ记录的数目、删除的行数、更新的记录数等Q不要认为只是返回查扄记录数目Q而且@@ROWCOUNT要紧跟需要判断语句,否则@@ROWCOUNT返??/p>

3Q如果用表变量Q在条g表达式中要用别名来替代表名Q否则系l会报错?/p>

4Q在CUDcȝ操作中一定要有事务处理?/p>

5Q用错误处理程序,用来?@@ERROR pȝ函数?T-SQL 语句 (IF) 实际上在q程中清除了 @@ERROR |无法再捕获除零之外的M?必须使用 SET ?SELECT 立即捕获错误代码?br>
SET ANSI_NULLS

SQL-92 标准要求在对ID行等?(=) 或不{于 (<>) 比较时取gؓ FALSE。当 SET ANSI_NULLS ?ON Ӟ即 column_name 中包含空|使用 WHERE column_name = NULL ?SELECT 语句仍返回零行。即?column_name 中包含非I|使用 WHERE column_name <> NULL ?SELECT 语句仍会q回零行?/p>

?SET ANSI_NULLS ?OFF Ӟ{于 (=) 和不{于 (<>) 比较q算W不遵从 SQL-92 标准。?WHERE column_name = NULL ?SELECT 语句q回 column_name 中包含空值的行。?WHERE column_name <> NULL ?SELECT 语句q回列中包含非空值的行。此外,使用 WHERE column_name <> XYZ_value ?SELECT 语句q回所有不?XYZ_value 也不?NULL 的行?/p>

注意Q?
SQL Server 是将I字W串解释为单个空D是解释ؓ真正的空字符Ԍ由兼容别设|控制。如果兼容别小于或{于 65Q则 SQL Server 会将I字W串解释为单个空根{如果兼容别等?70Q则 SQL Server 会将I字W串解释为空字符丌Ӏ有兌|兼容别的详细信息Q请参阅 sp_dbcmptlevel (Transact-SQL)?

 

 

?SET ANSI_NULLS ?ON Ӟ所有对I值的比较均取gؓ UNKNOWN。当 SET ANSI_NULLS ?OFF Ӟ如果数据gؓ NULLQ则所有数据对I值的比较取gؓ TRUE。如果未指定 SET ANSI_NULLSQ则应用当前数据库的 ANSI_NULLS 选项讄。有?ANSI_NULLS 数据库选项的详l信息,请参?ALTER DATABASE (Transact-SQL) ?a onclick="javascript:Track('ctl00_LibFrame_ctl09|ctl00_LibFrame_ctl12',this);" >讄数据库选项?/p>

仅当某个比较操作数是gؓ NULL 的变量或文字 NULL ӞSET ANSI_NULLS ON 才会影响比较。如果比较双Ҏ列或复合表达式,则该讄不会影响比较?/p>

Z脚本按预期运行,不管 ANSI_NULLS 数据库选项?SET ANSI_NULLS 的设|如何,请在可能包含I值的比较中?IS NULL ?IS NOT NULL?/p>

在执行分布式查询时应?SET ANSI_NULLS 讄?ON?/p>

对计列或烦引视囑ֈ建或更改索引ӞSET ANSI_NULLS 也必Mؓ ON。如?SET ANSI_NULLS ?OFFQ则针对表(包含计算列或索引视图的烦引)?CREATE、UPDATE、INSERT ?DELETE 语句失败。SQL Server 返回一个错误消息,该错误消息会列出所有违反所需值的 SET 选项。另外,在执?SELECT 语句Ӟ如果 SET ANSI_NULLS ?OFFQ则 SQL Server 忽略计列或视囄索引值ƈ解析选择操作Q就好像表或视图没有q样的烦引一栗?/p>

注意Q?
ANSI_NULLS 是在处理计算列或索引视图的烦引时必须讄为所需值的七个 SET 选项之一。还必须选项 ANSI_PADDING、ANSI_WARNINGS、ARITHABORT、QUOTED_IDENTIFIER ?CONCAT_NULL_YIELDS_NULL 讄?ONQ而必d NUMERIC_ROUNDABORT 讄?OFF?

 

 

SQL Server ?SQL Native Client ODBC 驱动E序?SQL Native Client OLE DB 讉K接口在连接时会自动将 ANSI_NULLS 讄?ON。该讄可以?ODBC 数据源、ODBC q接属性或 OLE DB q接属性(它们在连接到 SQL Server 实例之前在应用程序中讄Q中q行配置。SET ANSI_NULLS 的默认gؓ OFF?/p>

?SET ANSI_DEFAULTS ?ON Ӟ启?SET ANSI_NULLS?/p>

SET ANSI_NULLS 的设|是在执行或q行时设|,而不是在分析时设|?/p>



SET QUOTED_IDENTIFIER

?SQL Server 2005 遵从关于引号分隔标识W和文字字符串的 SQL-92 规则。由双引号分隔的标识W可以是 Transact-SQL 保留关键字,也可以包?Transact-SQL 标识W语法约定通常不允许的字符?/p>

主题链接图标 Transact-SQL 语法U定

语法语法
备注备注

?SET QUOTED_IDENTIFIER ?ON Ӟ标识W可以由双引号分隔,而文字必ȝ单引号分隔。当 SET QUOTED_IDENTIFIER ?OFF Ӟ标识W不可加引号Q且必须W合所?Transact-SQL 标识W规则。有兌l信息,请参?a onclick="javascript:Track('ctl00_LibFrame_ctl09|ctl00_LibFrame_ctl10',this);" >标识W?/a>。文字可以由单引h双引号分隔?/p>

?SET QUOTED_IDENTIFIER ?ONQ默认|Ӟ由双引号分隔的所有字W串都被解释为对象标识符。因此,加引L标识W不必符?Transact-SQL 标识W规则。它们可以是保留关键字,q且可以包含 Transact-SQL 标识W中通常不允许的字符。不能用双引号分隔文字字符串表辑ּQ而必ȝ单引h住文字字W串。如果单引号 (') 是文字字W串的一部分Q则可以׃个单引号 (") 表示。当Ҏ据库中的对象名用保留关键字ӞSET QUOTED_IDENTIFIER 必须?ON?/p>

?SET QUOTED_IDENTIFIER ?OFF Ӟ表达式中的文字字W串可以由单引号或双引号分隔。如果文字字W串由双引号分隔Q则可以在字W串中包含嵌入式单引P如省略号?/p>

当在计算列或索引视图上创建或更改索引ӞSET QUOTED_IDENTIFIER 必须?ON。如?SET QUOTED_IDENTIFIER ?OFFQ则计算列或索引视图上带索引的表上的 CREATE、UPDATE、INSERT ?DELETE 语句失败。有兌列的烦引视囑֒索引所必需?SET 选项讄的详l信息,请参?SET (Transact-SQL) 中的“使用 SET 语句时的注意事项”?/p>

在进行连接时QSQL 本机客户?ODBC 驱动E序?SQL Server ?SQL Native Client OLE DB Provider 自动?QUOTED_IDENTIFIER 讄?ON。这可以?ODBC 数据源、ODBC q接Ҏ或 OLE DB q接属性中q行配置。对来自 DB-Library 应用E序的连接,SET QUOTED_IDENTIFIER 默认讄?OFF?/p>

创徏表时Q即使此时将 QUOTED IDENTIFIER 选项讄?OFFQ该选项在表的元数据中仍始终存储?ON?/p>

创徏存储q程Ӟ捕?SET QUOTED_IDENTIFIER ?SET ANSI_NULLS 讄Qƈ用于该存储过E的后箋调用?/p>

在存储过E内执行 SET QUOTED_IDENTIFIER Ӟ其设|不更改?/p>

?SET ANSI_DEFAULTS ?ONӞ启?SET QUOTED_IDENTIFIER?/p>

SET QUOTED_IDENTIFIER q与 ALTER DATABASE ?QUOTED_IDENTIFER 讄相对应。有x据库讄的详l信息,请参?ALTER DATABASE (Transact-SQL) ?a onclick="javascript:Track('ctl00_LibFrame_ctl09|ctl00_LibFrame_ctl13',this);" >讄数据库选项?/p>

SET QUOTED_IDENTIFIER 是在分析时进行设|的。在分析时进行设|意味着QSET 语句只要出现在批处理或存储过E中即生效,与代码执行实际上是否到达该点无关Qƈ?SET 语句在Q何语句执行之前生效?/p>



]]>
SQL Serverpȝ表的应用 http://www.tkk7.com/SIDNEY/archive/2007/07/04/128071.html渠上?/dc:creator>渠上?/author>Wed, 04 Jul 2007 05:04:00 GMThttp://www.tkk7.com/SIDNEY/archive/2007/07/04/128071.htmlhttp://www.tkk7.com/SIDNEY/comments/128071.htmlhttp://www.tkk7.com/SIDNEY/archive/2007/07/04/128071.html#Feedback0http://www.tkk7.com/SIDNEY/comments/commentRss/128071.htmlhttp://www.tkk7.com/SIDNEY/services/trackbacks/128071.html
  在应用SQL Server的基于客h/服务器体pȝ构的信息pȝ开发中Q有旉要将后台SQL Server上的某一数据库的表结构都打印出来Q以便于开发h员查阅及最l文档的形成。SQL Server本n提供了一个系l存储过E(SP_COLUMNSQ?可以完成对单个表l构的查询,只要在SQL Server的ISQL-W工具中键入SP_COLUMNS “表名”Qƈ执行卛_得到l果集。但该方法有许多不之处Q其主要~点是:

  1) 只能对单表进行操作,当需要查询一个数据库中所有的表时Q需要多ơ执行SP_COLUMNS Q因此显得非常繁琐?

  2) 查询l果集中包含了许多不必要的信息?

  下面我们创徏一个存储过E来完成Ҏ一个数据库中所有表l构的查询?

  在创Z个数据库的同Ӟpȝ会自动徏立一些系l表Q限于篇q的~故我们在这里只介绍与应用实例有关的三个pȝ表(SYSOBJECTSQSYSCOLUMNSQSYSTYPESQ及其相关的字段?

  表SYSOBJECTS为数据库内创建的每个对象Q约束,规则Q表Q视图,触发器等Q创Z条记录?

  该表相关字段的含义如下:

  SYSOBJECTS.name 对象名,如:表名Q视囑֐?

  SYSOBJECTS.id 对象id?

  SYSOBJECTS.type 对象cdQp存储q程Qv视图Qspȝ表,u用户表)?

  表SYSCOLUMNS 为每个表、视图中的每个列和每个存储过E的每个参数创徏一条记录?

  该表相关字段的含义如下:Q此处的列系指数据库中每个表、视图中的列Q?

  SYSCOLUMNS. id 该列所属的表的idQ可与SYSOBJECTS.id相关?

  SYSCOLUMNS.colid 列idQ表C列是表或视图的第几列?

  SYSCOLUMNS.type 物理存储cdQ可与SYSTYPES.type相关联?

  SYSCOLUMNS.length 数据的物理长度?

  SYSCOLUMNS.name 列名字,卛_D名?

  SYSCOLUMNS .Pre 列的_ֺU?

  SYSCOLUMNS .Scale 列的标度U?

  表SYSTYPES 为每个系l和每个用户提供的数据类型创Z条记录,如果它们存在Q给定域和默认|描述pȝ提供的数据类型的行不可更攏V?

  该表相关字段的含义如下:

  SYSTYPES.name 数据cd的名字?

  SYSTYPES.type 物理存储数据cd?

  在SQL SERVER的企业管理器(SQL ENTERPRISE MANAGER)?选定某一数据库,创徏存储q程print_dbstructure?

  源代码如? 

  if exists (select * from sysobjects where id = object_id('dbo. print_dbstructure

  ') and sysstat & 0xf = 4) 存储q程

  drop procedure dbo. print_dbstructure

  

  GO

  CREATE PROCEDURE print_dbstructure

  

  AS

  SELECT DISTINCT sysobjects.name, syscolumns.colid,

  syscolumns.name, systypes.name, syscolumns.prec, syscolumns.scale

  FROM syscolumns, sysobjects, systypes

  WHERE sysobjects.id = syscolumns.id AND systypes.type = syscolumns.type AND ((sysobjects.type='u'))

  

  GO

  首先判断是否存在一个名为print_dbstructure的存储过E,如果存在Q就摘除?否则Q定义SQL语句建立新的存储q程。从三个pȝ表中选出满条g的记录(卌数据库中保存在系l表中的用户表信息)?

  执行Ӟ在ISQL_W工具中,选定print_dbstructure所在的数据库,执行该存储过E,卛_得到l果集(卌数据库中用户表的l构信息Q?


 SQL Serverpȝ表的推广应用


  以上所介绍存储q程的主要缺陷在于只能对服务器上某一特定的数据库Qprint_dbstructure所在的数据库)q行查询操作Q我们可以通过在SQL Serverpȝ数据库MASTER中徏立带有数据库名参数的pȝ存储q程来解册一问题 



]]>
奇怪的问题 一?SQL http://www.tkk7.com/SIDNEY/archive/2007/04/07/109066.html渠上?/dc:creator>渠上?/author>Sat, 07 Apr 2007 02:23:00 GMThttp://www.tkk7.com/SIDNEY/archive/2007/04/07/109066.htmlhttp://www.tkk7.com/SIDNEY/comments/109066.htmlhttp://www.tkk7.com/SIDNEY/archive/2007/04/07/109066.html#Feedback2http://www.tkk7.com/SIDNEY/comments/commentRss/109066.htmlhttp://www.tkk7.com/SIDNEY/services/trackbacks/109066.htmlinsert into CTtemp.dbo.SEC_S_SCO_NEW(guid,pub_dt,creat_tm,updt_tm,rmrk,sec_cd,f0010,f0020,f0030,f0040,f0050,f0060,f0070,f0080,f0090,f0100,f0110,f0120,f0130,f0140,f0150,f0160,f0170,f0180,sum1,sum2,sum3,subsum,totalsum,lasttotal)
select NEWID() guid, a1.PUB_DT, GETDATE() creat_tm, NULL updt_tm, NULL rmrk, a1.SEC_CD,
 b1.SCORE F0010, b1.SEGMENT F0020, b2.SCORE F0030, b2.SEGMENT F0040, b3.SCORE F0050, b3.SEGMENT F0060,
 c1.SCORE F0070, c1.SEGMENT F0080, c2.SCORE F0090, c2.SEGMENT F0100, c3.SCORE F0110, c3.SEGMENT F0120,
 d1.SCORE F0130, d1.SEGMENT F0140, d2.SCORE F0150, d2.SEGMENT F0160, d3.SCORE F0170, d3.SEGMENT F0180,
 a2.SCORE Sum1, a3.SCORE Sum2, a4.SCORE Sum3, a5.SCORE SubSUM, a1.SCORE TotalSum,e.SCORE LastTotal 
FROM CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT a1
LEFT JOIN CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT a2 ON a1.SEC_CD=a2.SEC_CD AND a1.pub_dt=a2.pub_dt AND a2.SCO_ID='0101'
LEFT JOIN CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT a3 ON a1.SEC_CD=a3.SEC_CD AND a1.pub_dt=a3.pub_dt AND a3.SCO_ID='0102'
LEFT JOIN CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT a4 ON a1.SEC_CD=a4.SEC_CD AND a1.pub_dt=a4.pub_dt AND a4.SCO_ID='0103'
LEFT JOIN CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT a5 ON a1.SEC_CD=a5.SEC_CD AND a1.pub_dt=a5.pub_dt AND a5.SCO_ID='0104'
LEFT JOIN CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT b1 ON a1.SEC_CD=b1.SEC_CD AND a1.pub_dt=b1.pub_dt AND b1.SCO_ID='010101'
LEFT JOIN CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT b2 ON a1.SEC_CD=b2.SEC_CD AND a1.pub_dt=b2.pub_dt AND b2.SCO_ID='010102'
LEFT JOIN CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT b3 ON a1.SEC_CD=b3.SEC_CD AND a1.pub_dt=b3.pub_dt AND b3.SCO_ID='010103'
LEFT JOIN CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT c1 ON a1.SEC_CD=c1.SEC_CD AND a1.pub_dt=c1.pub_dt AND c1.SCO_ID='010201'
LEFT JOIN CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT c2 ON a1.SEC_CD=c2.SEC_CD AND a1.pub_dt=c2.pub_dt AND c2.SCO_ID='010202'
LEFT JOIN CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT c3 ON a1.SEC_CD=c3.SEC_CD AND a1.pub_dt=c3.pub_dt AND c3.SCO_ID='010203'
LEFT JOIN CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT d1 ON a1.SEC_CD=d1.SEC_CD AND a1.pub_dt=d1.pub_dt AND d1.SCO_ID='010301'
LEFT JOIN CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT d2 ON a1.SEC_CD=d2.SEC_CD AND a1.pub_dt=d2.pub_dt AND d2.SCO_ID='010302'
LEFT JOIN CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT d3 ON a1.SEC_CD=d3.SEC_CD AND a1.pub_dt=d3.pub_dt AND d3.SCO_ID='010303'
LEFT JOIN CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT e ON a1.SEC_CD=e.SEC_CD AND e.pub_dt=(SELECT min(PUB_DT) FROM (select top 2 pub_dt from CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT where sco_id='01' order by pub_dt desc) a) AND e.SCO_ID=a1.SCO_ID
WHERE a1.SCO_ID='01'
 AND a1.PUB_DT = (SELECT max(PUB_DT) FROM CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT)


----------------
出错:
消息 8180Q?16Q状?1Q第 1 ?br>未能准备语句?br>消息 207Q?16Q状?3Q第 1 ?br>列名 'Col2201' 无效?br>消息 207Q?16Q状?3Q第 1 ?br>列名 'Col2204' 无效?br>
把最后left join 改ؓinner join 可以了?br>--------------------------------------------------------------------------------------------------------------------------

insert into CTtemp.dbo.SEC_S_SCO_NEW(guid,pub_dt,creat_tm,updt_tm,rmrk,sec_cd,f0010,f0020,f0030,f0040,f0050,f0060,f0070,f0080,f0090,f0100,f0110,f0120,f0130,f0140,f0150,f0160,f0170,f0180,sum1,sum2,sum3,subsum,totalsum,lasttotal)
select NEWID() guid, a1.PUB_DT, GETDATE() creat_tm, NULL updt_tm, NULL rmrk, a1.SEC_CD,
 b1.SCORE F0010, b1.SEGMENT F0020, b2.SCORE F0030, b2.SEGMENT F0040, b3.SCORE F0050, b3.SEGMENT F0060,
 c1.SCORE F0070, c1.SEGMENT F0080, c2.SCORE F0090, c2.SEGMENT F0100, c3.SCORE F0110, c3.SEGMENT F0120,
 d1.SCORE F0130, d1.SEGMENT F0140, d2.SCORE F0150, d2.SEGMENT F0160, d3.SCORE F0170, d3.SEGMENT F0180,
 a2.SCORE Sum1, a3.SCORE Sum2, a4.SCORE Sum3, a5.SCORE SubSUM, a1.SCORE TotalSum,e.SCORE LastTotal 
FROM CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT a1
LEFT JOIN CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT a2 ON a1.SEC_CD=a2.SEC_CD AND a1.pub_dt=a2.pub_dt AND a2.SCO_ID='0101'
LEFT JOIN CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT a3 ON a1.SEC_CD=a3.SEC_CD AND a1.pub_dt=a3.pub_dt AND a3.SCO_ID='0102'
LEFT JOIN CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT a4 ON a1.SEC_CD=a4.SEC_CD AND a1.pub_dt=a4.pub_dt AND a4.SCO_ID='0103'
LEFT JOIN CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT a5 ON a1.SEC_CD=a5.SEC_CD AND a1.pub_dt=a5.pub_dt AND a5.SCO_ID='0104'
LEFT JOIN CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT b1 ON a1.SEC_CD=b1.SEC_CD AND a1.pub_dt=b1.pub_dt AND b1.SCO_ID='010101'
LEFT JOIN CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT b2 ON a1.SEC_CD=b2.SEC_CD AND a1.pub_dt=b2.pub_dt AND b2.SCO_ID='010102'
LEFT JOIN CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT b3 ON a1.SEC_CD=b3.SEC_CD AND a1.pub_dt=b3.pub_dt AND b3.SCO_ID='010103'
LEFT JOIN CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT c1 ON a1.SEC_CD=c1.SEC_CD AND a1.pub_dt=c1.pub_dt AND c1.SCO_ID='010201'
LEFT JOIN CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT c2 ON a1.SEC_CD=c2.SEC_CD AND a1.pub_dt=c2.pub_dt AND c2.SCO_ID='010202'
LEFT JOIN CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT c3 ON a1.SEC_CD=c3.SEC_CD AND a1.pub_dt=c3.pub_dt AND c3.SCO_ID='010203'
LEFT JOIN CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT d1 ON a1.SEC_CD=d1.SEC_CD AND a1.pub_dt=d1.pub_dt AND d1.SCO_ID='010301'
LEFT JOIN CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT d2 ON a1.SEC_CD=d2.SEC_CD AND a1.pub_dt=d2.pub_dt AND d2.SCO_ID='010302'
LEFT JOIN CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT d3 ON a1.SEC_CD=d3.SEC_CD AND a1.pub_dt=d3.pub_dt AND d3.SCO_ID='010303'
INNER JOIN CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT e ON a1.SEC_CD=e.SEC_CD AND e.pub_dt=(SELECT max(PUB_DT) FROM CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT where sco_id=a1.SCO_ID and pub_dt<a1.pub_dt) AND e.SCO_ID=a1.SCO_ID
WHERE a1.SCO_ID='01'
 AND a1.PUB_DT = (SELECT max(PUB_DT) FROM CDW_SRV.WD_10_SEL.dbo.SCORE_D_FACT)

]]>
在SQL2005 L配置SSIS?/title><link>http://www.tkk7.com/SIDNEY/archive/2007/02/14/99790.html</link><dc:creator>渠上?/dc:creator><author>渠上?/author><pubDate>Wed, 14 Feb 2007 02:51:00 GMT</pubDate><guid>http://www.tkk7.com/SIDNEY/archive/2007/02/14/99790.html</guid><wfw:comment>http://www.tkk7.com/SIDNEY/comments/99790.html</wfw:comment><comments>http://www.tkk7.com/SIDNEY/archive/2007/02/14/99790.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/SIDNEY/comments/commentRss/99790.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/SIDNEY/services/trackbacks/99790.html</trackback:ping><description><![CDATA[ <span id="ArticleContent1_ArticleContent1_lblContent">  <p> </p><p>在以前的DTS中,在包的开发、测试、发布迁U过E中有很多问?典型的问题是你必L动的定包中的所有连接都指向一个实际存在的物理服务?/p><p>q运的是Q现在在SSIS中提供了q种问题的解x案,那就是包配置<br />包配|是一个动态改变你的SSIS对象和连接属性的一U机?它把q些动态可以改变的信息保存在包的外部,有下面几U方法存储这些值ƈ其传送到包中Q?br /> XML文g<br /> 环境变量<br /> 注册表键?br /> 父包变量</p><p>下面我们D例用XML文g存储q些?/p><p>q个例子我们会把一个文本文件导入到数据库的表中Qƈ可以动态配|数据库的位|来?/p><p>首先开始我们的包的建立Q?br /> 假设存在一文本文g PersonAge.txtQ内容如下:<br />  1,Joe Bloggs,27<br />  2,Mary Smith,26<br />  3,Fred Jones,28<br /> 目标表ؓdbo.PersonAgeQ用下面代码徏立?br />  CREATE TABLE [dbo].[PersonAge](<br />   [PersonAgeKey] [int] NULL,<br />   [Person] [varchar](35) NULL,<br />   [PersonAge] [int] NULL<br />  ) ON [PRIMARY]<br />  GO<br /> 下面开始拖曳组件到控制面?br />   。一个Execute SQL tasklg,命名为Truncate destination. ?SQL 命o?TRUNCATE TABLE dbo.PersonAge. <br />   。一个数据流lgQ命名ؓImport File. <br />   。然后把2者关联v?br /> <br />   <img alt="" src="http://www.sqlis.com/images/26image002.jpg" /><br /> <br />  下面开始设计【Import File】数据流d<br />   。一?Flat File connection lg指向PersonAge.txt文g <br />   。一?OLE DB Connection lg指向存在dbo.PersonAge表的数据?Q然后配|列的属性,使表跟文件对应v?br />      <br />   <img alt="" src="http://www.sqlis.com/images/26image004.jpg" /><br />  <br />  到现在ؓ止,已经成功的徏立了?/p><p>讄包配|?br />  现在开始设|包配置Q这是非常简单的且具有很好的Ҏ?br />  包配|你能~辑你的包的属性、变量、连接和你的控制的其他属性,需要注意的是,你不能编辑你的数据流lg的属?br />  <br />  在菜单条上,单击DTS, Package Configurations?或者在控制设计面板右键选择Package Configurations? <br />  然后在包配置中允许包配置选择Qƈ单击d<br />  在单击过后出C个欢q屏qƈ让你选择配置cdQ当前选择XML Configuration File<br />  然后键入配置文g名,如C:\PackageConfigurations\Environment.dtsConfigQ单M一?br />  然后在对象树览中选择Connections.Destination.Properties的InitialCatalog ?ServerName属性,然后单击下一?br />  l你的配|一个名字,q样整个q程完成了<br />  <br />q样你的包将在运行期间获?个属性的|你打开XML配置文gQ你看得这些你需要动态改变属性的当前值 ?/p><p>现在Q你可以非常Ҏ的迁Ud到另一个新的环境,而你只须改变你的包配|文ӞC:\PackageConfigurations\Environment.dtsConfigQ即?/p><p><br />英文来源Q?a >http://www.sqlis.com/default.aspx?26</a></p></span> <img src ="http://www.tkk7.com/SIDNEY/aggbug/99790.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/SIDNEY/" target="_blank">渠上?/a> 2007-02-14 10:51 <a href="http://www.tkk7.com/SIDNEY/archive/2007/02/14/99790.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL中的全文?/title><link>http://www.tkk7.com/SIDNEY/archive/2007/02/01/97289.html</link><dc:creator>渠上?/dc:creator><author>渠上?/author><pubDate>Thu, 01 Feb 2007 07:25:00 GMT</pubDate><guid>http://www.tkk7.com/SIDNEY/archive/2007/02/01/97289.html</guid><wfw:comment>http://www.tkk7.com/SIDNEY/comments/97289.html</wfw:comment><comments>http://www.tkk7.com/SIDNEY/archive/2007/02/01/97289.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/SIDNEY/comments/commentRss/97289.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/SIDNEY/services/trackbacks/97289.html</trackback:ping><description><![CDATA[ <p>原帖地址:http://community.csdn.net/Expert/topic/3295/3295983.xml?temp=.6606409</p> <p>全文索引和查询概?摘自SQL 联机帮助)</p> <p>全文索引、查询和同步化最主要的设计要求是Q在注册q行全文索的所有表上都有一个唯一的全文键列(或者单列主键)。全文烦引对使用的重要字及其所在位|进行跟t?/p> <p>例如Q假定有一个对 DevTools 表的全文索引。全文烦引可能指出在 Abstract 列的W?423 个和W?982 个单词处扑ֈ了单?MicrosoftQ所在的行与 ProductID 6 兌。该索引l构支持Ҏ有包含被索引单词的项q行有效索,以及高񔋂索操作,如短语检索和邻近索?/p> <p>为防止全文烦引因包含很多Ҏ索没有帮助的词而变得臃肿,a、and、is ?the q类额外的词都忽略不计。例如,指定"the products ordered during these summer months"与指?products ordered during summer months"是一L。有q两个字W串的行都会被返回?/p> <p>目录 \Mssql\Ftdata\Sqlserver\Config 下提供了多种语言的干扰词列表。在安装带有全文索支持的 Microsoft&reg; SQL Server&#8482; 时会创徏q个目录Qƈ同时安装q扰词文件。干扰词文g可以~辑。例如,高技术公司的pȝ理员可以把单词 computer dC们的q扰词表中去。(如果~辑q扰词文Ӟ则必d更改生效之前重新填充全文目录。)下表昄了干扰词文g及其相应的语a?/p> <p>q扰词文件    ?语言 <br />-------------- ---------<br />Noise.chs      体中?<br />Noise.cht      J体中文 <br />Noise.dat      语言中?<br />Noise.deu      徯 <br />Noise.eng      pQ英国) <br />Noise.enu      pQ美国) <br />Noise.esn      西班牙语 <br />Noise.fra      法语 <br />Noise.ita      意大利语 <br />Noise.jpn      日语 <br />Noise.kor      韩文 <br />Noise.nld      荷兰?<br />Noise.sve      瑞典?</p> <p> <br />在处理全文查询时Q检索引擎将满条g的行的键D回给 Microsoft SQL Server。比如有一?SciFi 表,其中 Book_No 列是主键列?/p> <p>Book_No   Writer     Title <br />-------- ----------- --------------------------<br />A025     Asimov      Foundation's Edge <br />A027     Asimov      Foundation and Empire <br />C011     Clarke      Childhood's End <br />V109     Verne       Mysterious Island </p> <p> <br />假定想用一个全文检索查询来查找包含单词 Foundation 的书名。在本例中,从全文索引获得?A025 ?A027。然?SQL Server 用这些键值和其它栏的信息响应该查询?/p> <p>下表昄了存储全文烦引数据所使用的语a。这些语aZ SQL Server 安装期间选择?Unicode 排序规则区域讄标识W?/p> <p>Unicode 排序规则区域讄标识W  ?全文数据存储所用的语言 <br />------------------------------- -----------------------<br />中文注音W号Q台湾)              J体中文  <br />汉语拼音                         体中文?<br />中文W画                         体中文?<br />中文W画Q台湾)                 J体中文  <br />荷兰语                         ?荷兰语?<br />pQ英国)                     pQ英国)  <br />法语                            法语  <br />通用 Unicode                    pQ美国)  <br />徯                            徯  <br />h电话                     ?徯  <br />意大利语                         意大利语  <br />日语                            日语  <br />日语 Unicode                    日语  <br />韩文                            韩文  <br />韩文 Unicode                    韩文  <br />西班牙语Q现代)                 西班牙语  <br />瑞典/芬兰语                    ?瑞典语?</p> <p> </p> <p>此列表中没有的其它所?Unicode 排序规则区域讄标识W值都映射C用空格分隔单词的中性语a单词的断字符和词q分隔符?/p> <p>说明  Unicode 排序规则区域讄标识W设|用于所有可q行全文索引的数据类型(?char、nchar {)。如果ؓ char、varchar ?text cd列的排序ơ序讄的语acdQ不?Unicode 排序规则区域讄标识W语aQ那么在?char、varchar ?text cd的列q行全文索引和查询时Q仍然?Unicode 排序规则区域讄标识W倹{?/p> <p>创徏全文索引(以烦引image列ؓ?其他cd字段大致一?</p> <p>标题     全文索引image列,全攻略!<br />作者   ?pengdali [原作]  <br />关键字 ?全文索引 image </p> <p> <br /> 今天“百q不遇”的停电了,看了一天书。晚上搞了一下全文烦引,军_把心得脓出来Q我量写的详细Q大家共同学习,Ƣ迎指正Q?/p> <p>1、启?Microsoft Search 服务<br />   开始菜?->SQLE序l?->服务理?->下拉{?->Microsoft Search 服务-->启动?/p> <p>2?br />  ..\Microsoft SQL Server\MSSQL\FTDATA\SQLServer\Config\目录里徏一个非Inoise.chs文g<br />  非空noise.chs文gQ也有h说是I的noise.chs文gQ但我每ơ都往里写几个没用的字母?/p> <p>3、徏立环?br />   打开查询分析?->执行下列脚本Q?br />--------------------------------------------<br />create database test ---创徏test数据?br />use test             ---选择test数据?br />create table  dali (ID int not null primary key,MyImage image,FileType varchar(255),FileNmae varchar(255)) ---创徏dali?br />--dali表中 Id,MyImage,FileType 三列是必ȝQ因对image列烦引的话,必须要有一个主键列Q一个image?一个存放文件类型的?br />--我们知道在windowspȝ中文件类型是靠扩展名来区分的所以FileType列也是用来?文g的扩展名<br />--------------------------------------------</p> <p>sp_fulltext_database 'enable' --为全文烦引启用数据库<br />sp_fulltext_catalog 'My_FullDir', 'create'  ---创徏一个叫My_FullDif的全文目?/p> <p>declare @Key sysname ; select @Key=c.name from syscolumns a,sysconstraints b,sysobjects c where a.id=object_id('dali') and a.name='ID' and a.id=b.id and b.constid=c.id and c.name like 'PK%'<br />exec sp_fulltext_table 'dali','create','My_FullDir',@Key  ----q两句是为全文烦?对表q行标记</p> <p>sp_fulltext_column 'dali','MyImage','add',0x0804,'FileType'  ---q句是指定MyImage列ؓ全文索引?FileType是类型列<br />------------------------------------------------<br />4、在c盘下放一个扩展名为doc的word文g,一个扩展名为xls的excel文g,一个扩展名为htm的网|?个扩展名为bmp的图?br />   ?个,大家可根据实际情冉|入!</p> <p>5、插入数?br />  建立下面q个存储q程<br />--------------------------------------------------<br />CREATE PROCEDURE sp_textcopy <br />  @srvname    varchar (30), <br />  @login      varchar (30), <br />  @password    varchar (30), <br />  @dbname      varchar (30), <br />  @tbname      varchar (30), <br />  @colname    varchar (30), <br />  @filename    varchar (30), <br />  @whereclause varchar (40), <br />  @direction  char(1) <br />AS <br />/* q是使用textcopy工具文件插入到数据库中Q如果有前台工具可以用前台开发工具将文g插入Q这里ؓ了演C?*/<br />DECLARE @exec_str varchar (255) <br />SELECT @exec_str='textcopy /S <a href="mailto:'+@srvname+'">'+@srvname+'</a> /U <a href="mailto:'+@login+'">'+@login+'</a> /P <a href="mailto:'+@password+'">'+@password+'</a> /D <a href="mailto:'+@dbname+'">'+@dbname+'</a><a>/T'+@tbname+'</a> /C <a href="mailto:'+@colname+'">'+@colname+'</a> /W"<a href="mailto:'+@whereclause+'">'+@whereclause+'</a>" /F"<a href="mailto:'+@filename+'">'+@filename+'</a>" <a>/'+@direction</a><br />EXEC master..xp_cmdshell @exec_str<br />----------------------------------------------------</p> <p>insert dali values(1,0x,'doc','大力的doc') ---其中W二列是 0x 它是一?6q制数对应image?是必ȝ,不要写null,W三列是文gcdQ既扩展?/p> <p>sp_textcopy '你的服务器名','sa','你的密码','test','dali','MyImage','c:\大力的doc.doc','where ID=1','I'<br />-------依次参数是:实例?用户?密码Q数据库名,表名Qimage列名Q\径及文g名,条g(你必M证它只选择一?QI<br />---------------------------------------------------------------------------------------------------------------------<br />insert dali values(2,0x,'bmp','囄')<br />sp_textcopy '你的服务器名','sa','你的密码','test','dali','MyImage','c:\囄.bmp','where ID=2','I' --注意条g?ID=2</p> <p>insert dali values(3,0x,'xls','Excel文g')<br />sp_textcopy '你的服务器名','sa','你的密码','test','dali','MyImage','c:\Excel文g.xls','where ID=3','I' --注意条g?ID=3</p> <p>insert dali values(4,0x,'htm','|页')<br />sp_textcopy '你的服务器名','sa','你的密码','test','dali','MyImage','c:\|页.htm','where ID=4','I' --注意条g?ID=4</p> <p>----------上面的语?要保证类型一P路径正确Q条件唯一正确应该可以了</p> <p>6、填充全文烦?/p> <p>sp_fulltext_table 'dali','start_full' ---W一个参数是表名Q第二个参数是启动表的全文烦引的完全填充</p> <p>7、可以开始你的实验了</p> <p>select * from dali where contains(MyImage,'J老师')</p> <p>select * from dali where contains(MyImage,'师')</p> <p>------END----------<br />--调试环境QSQLServer2000企业版、Windows2000高服务?/p> <p>全文索引中的几个问题:</p> <p>1.搜烦时出现错?<br />  服务? 消息 7619Q?16Q状?1Q行 2<br />  查询子句只包含被忽略的词</p> <p>  q种情况修改 \Mssql\Ftdata\Sqlserver\Config 下对应语a的干扰词列表文g</p> <p>2.修改了干扰词文g,查询中文时仍然出Cq问?br />  a.首先查你的SQL有没有安装最新的补丁,查的Ҏ是在查询分析器中q行:<br />    select @@version<br />    如果出来的版本号?.00.760以下,则表明你未安装sp3的补?要装?</p> <p>    SQL补丁下蝲:<br />    <a >http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=9032f608-160a-4537-a2b6-4cb265b80766</a></p> <p>    注意下蝲?执行的时候是解压,要在解压后的目录中执行setup.bat才是真正的安?br /> <br />  b.配置全文索引?单词断字W选择"中文(中国)"</p> <p>  c.Noise.chs文g中至有一个单?例如:?</p> <p>  d.如果在全文检索时,你能正常修改q扰词文?说明你的全文索没有用上q个文g<br />    如果你配|的全文索应该要用到q个文g,那就?br />    企业理?-展开你的数据?-右键全文目录--重徏全部全文目录</p> <p>3.表中的数据改变后,索不?br />  Ҏ1. 右键你的?-全文索引?-启用增量填充<br />  Ҏ2. 右键你的?-全文索引?-更改跟踪,q样以后的修改会自动填充(有一定gq?</p> <p>4.sql2000才支持对image列的全文?/p> <p>熟悉了以下存储过E,对全文烦引就比较熟练?/p> <p>全文索过E?--摘自联机丛书<br />sp_fulltext_catalog sp_help_fulltext_catalogs_cursor <br />sp_fulltext_column sp_help_fulltext_columns <br />sp_fulltext_database sp_help_fulltext_columns_cursor <br />sp_fulltext_service sp_help_fulltext_tables <br />sp_fulltext_table sp_help_fulltext_tables_cursor <br />sp_help_fulltext_catalogs </p> <p>FreeTableText 主要是用来做模糊查询?</p> <p> <a >http://www.microsoft.com/china/msdn/archives/library/dnsql2k/html/sql_fulltextsearch.asp</a> <br /> </p> <br /> <br /> <p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=388810<br /><br /><br /><br />EXEC sp_fulltext_table 'tMotifTalbe_D(表名)', 'drop'--删除表烦?br />EXEC sp_help_fulltext_catalogs --查看索引目录及名U?br />EXEC sp_fulltext_catalog 'Motif(索引名称)', 'drop(动作)'  --删除全文目录</p> <p>exec sp_fulltext_catalog 'Motif(索引名称)', 'create(动作)', 'e:\web_data\zsk_data(存放物理路径)' --创徏全文?br />exec sp_fulltext_table 'tMotifTalbe_D(表名)', 'create(动作)', 'Motif(索引名称)','PK_tMotifTalbe_D(单健索引名称)'  --创徏索引U束<br />exec sp_fulltext_column 'tMotifTalbe_D(表名)', 'KTitles(字段?', 'add(动作)'--d全文索引?br /><br /></p> <img src ="http://www.tkk7.com/SIDNEY/aggbug/97289.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/SIDNEY/" target="_blank">渠上?/a> 2007-02-01 15:25 <a href="http://www.tkk7.com/SIDNEY/archive/2007/02/01/97289.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>每个代码总量?个的均?/title><link>http://www.tkk7.com/SIDNEY/archive/2006/12/02/84977.html</link><dc:creator>渠上?/dc:creator><author>渠上?/author><pubDate>Sat, 02 Dec 2006 03:14:00 GMT</pubDate><guid>http://www.tkk7.com/SIDNEY/archive/2006/12/02/84977.html</guid><wfw:comment>http://www.tkk7.com/SIDNEY/comments/84977.html</wfw:comment><comments>http://www.tkk7.com/SIDNEY/archive/2006/12/02/84977.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/SIDNEY/comments/commentRss/84977.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/SIDNEY/services/trackbacks/84977.html</trackback:ping><description><![CDATA[ <p>DECLARE @temp table(CODE int,TOTALAMOUNT int)<br />declare @code int<br />declare row_cur scroll cursor for<br />select distinct code from dbo.His_Day_1 order by code<br />open row_cur<br />fetch first from row_cur into @code <br />while @@fetch_status=0<br /> begin<br />  insert into @temp(code,totalamount)<br />  select code,avg(totalamount) from  <br />  (select top 5 code,totalamount from dbo.His_Day_1 where <a href="mailto:code=@code">code=@code</a> order by time desc) a group by code <br />  fetch next from row_cur into @code <br /> end<br />close row_cur<br />deallocate row_cur</p> <p>select * from @temp order by code </p> <img src ="http://www.tkk7.com/SIDNEY/aggbug/84977.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/SIDNEY/" target="_blank">渠上?/a> 2006-12-02 11:14 <a href="http://www.tkk7.com/SIDNEY/archive/2006/12/02/84977.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL Server 2005的十大最新特?/title><link>http://www.tkk7.com/SIDNEY/archive/2006/10/17/75588.html</link><dc:creator>渠上?/dc:creator><author>渠上?/author><pubDate>Tue, 17 Oct 2006 05:29:00 GMT</pubDate><guid>http://www.tkk7.com/SIDNEY/archive/2006/10/17/75588.html</guid><wfw:comment>http://www.tkk7.com/SIDNEY/comments/75588.html</wfw:comment><comments>http://www.tkk7.com/SIDNEY/archive/2006/10/17/75588.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/SIDNEY/comments/commentRss/75588.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/SIDNEY/services/trackbacks/75588.html</trackback:ping><description><![CDATA[ <p>  在商界,每样东西都在竞争中争取“更好、更快、更便宜”——SQL Server 2005也提供了很多个新Ҏ来节省_֊、时间和金钱。从~程到管理能力,q个版本的SQL Server都优于其他版本的产品Qƈ且它q对SQL Server 2000中已l存在的Ҏ进行了加强。这里我按照它的重要E度列出前十个最重要的新Ҏ?/p> <p>  1、加强的T-SQL (事务处理SQL )</p> <p>  T-SQL 天生是Z集合的关pd数据库管理系l编E语aQ可以提供高性能的数据访问。现在,它与许多新的Ҏ相l合Q包括通过同时使用TRY和CTACH来进行错误处理,可以在语句中q回一个结果集的通用表表辑ּ(CTEs)Q以及通过PIVOT 和UNPIVOT命o列转化和将列{化ؓ行的能力?br /><br />  2、CLR(Common Language RuntimeQ通用语言q行?</p> <p>  SQL Server 2005中的W二个主要的增强Ҏ就是整合了W合.NET规范的语a Q例如C#, ASP.NET 或者是可以构徏对象(存储q程Q触发器Q函数等)?VB.NET。这一点让你可以在数据库管理系l中执行.NET代码以充分利?NET功能。它有望在SQL Server 2000环境中取代扩展的存储q程Q同时还扩展了传l关pd引擎功能?/p> <p>  3、服务代?Service Broker)</p> <p>  服务代理处理的是以松散方式进行联pȝ发送者和接收者之间的消息。一个消息被发送、处理和回答Q完成整个事务。这大大扩展了数据驱动应用程序的性能Q以W合工作或者客户业务需求?br /><br />  4、数据加?/p> <p>  SQL Server 2000没有用来在表自n加密数据的有文档记蝲的或者公共支持的函数。企业需要依赖第三方产品来满个需求。SQL Server 2005自n带有支持对用戯定义数据库中存储的数据进行加密的功能?/p> <p>  5、SMTP邮g</p> <p>  在SQL Server 2000中直接发送邮件是可能的,但是很复杂。在SQL Server 2005中,微Y通过合ƈSMTP邮g提高了自w的邮g性能。SQL Server从此跟Outlook说“bye-bye?</p> <p>  6、HTTPl端</p> <p>  你可以很L地通过一个简单的T-SQL 语句使一个对象可以在因特|上被访问,从而创Z个HTTPl端。这允许从因特网上呼叫一个简单的对象来获取需要的数据?/p> <p>  7、多zdl果?Multiple Active Result Sets Q简UMARS)</p> <p>  多活动结果集允许从单个的客户端到数据库保持一条持久的q接Q以便在每个q接上拥有超q一个的zdh。这是一个主要的性能改善Q它允许开发h员让用户在用SQL Server工作的时候拥有新的能力。例如,它允许多个查询,或者一个查询的同时输入数据。底U就是一个客Lq接可以同时拥有多个zd的进E?/p> <p>  8、专用管理员q接</p> <p>  如果所有的内容都出错了Q那么只能关闭SQL Server服务或者按下电源键。专用管理员q接l束了这U状c这个功能允许数据库理员对SQL Server发v单个诊断q接Q即使是服务器正在出现问题?/p> <p>  9、SQL Serverl合服务(SSIS)</p> <p>  SSIS已经作ؓ主要的ETL(抽取、传输和载入)工作替代了DTS(数据传输服务)Qƈ且随着SQL Server免费发布。这个工P从SQL Server 2000开始被完全重新~写Q现在已l拥有了很大E度的灵zL,来满_杂的数据Ud需求。 </p> <p>  10、数据库镜像</p> <p>  我ƈ没有指望q个功能会在11月䆾的RTM 中随着SQL Server 2005一起发布,但是我认个特性具有很大的潜力。数据库镜像是本地高可用性能力的扩展。所有,仍然在对更多的细节进行调整……那么现在,福吧?/p> <p>  q有两项技术不能在SQL Server 2005的前十列表中遗漏的是它的分析服务和报告服务。虽然SQL Server 2005没有介绍其中的Q何一,但是它们整合进了SQL Serverl合服务之中Q以求微软的核心商务套g的完。这些技术对于商务智能的成功臛_重要。学习新的特性,以及企业如何在实际项目中实现它?br /><br />Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1330538</p> <img src ="http://www.tkk7.com/SIDNEY/aggbug/75588.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/SIDNEY/" target="_blank">渠上?/a> 2006-10-17 13:29 <a href="http://www.tkk7.com/SIDNEY/archive/2006/10/17/75588.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL Server 2005Q你应该知道?3件事?/title><link>http://www.tkk7.com/SIDNEY/archive/2006/10/17/75585.html</link><dc:creator>渠上?/dc:creator><author>渠上?/author><pubDate>Tue, 17 Oct 2006 05:18:00 GMT</pubDate><guid>http://www.tkk7.com/SIDNEY/archive/2006/10/17/75585.html</guid><wfw:comment>http://www.tkk7.com/SIDNEY/comments/75585.html</wfw:comment><comments>http://www.tkk7.com/SIDNEY/archive/2006/10/17/75585.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/SIDNEY/comments/commentRss/75585.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/SIDNEY/services/trackbacks/75585.html</trackback:ping><description><![CDATA[ <p>微Y的SQL Server 2005正式版的推出已经近一q的旉。随着最q两份研I报告的出炉QSQL Server 2005又引起了业界的关注和评论——微软凭借SQL Server 2005取得了超qOracle和IBM数据库品市场占有率的增镉K度。但是,对于不一岁的SQL Server 2005Q还有一些你应该知道的事情,在本文中列D了关于SQL Server 2005你应该知道的13件事情?</p> <p>    SQL Server 2005新增的功?</p> <p>    1. 新的产品版本 </p> <p>    除SQL Server 2005标准版和企业版之外,产品U中q加入了SQL Server 2005化版QSQL Server 2005 ExpressQ和工作l版QSQL Server 2005 WorkgroupQ两个新版本?</p> <p>    SQL Server 2005 Express——其作用是代替微软SQL Server桌面引擎QMicrosoft SQL Server Desktop EngineQMSDEQ。SQL Server 2005 Express可以用于自由发布Qƈ与SQL Server使用同样的关pL据库核心引擎。不同的是它q不像MSDE一样用查询管理器。仅有的限制是一个CPUQ?G的内存和每个数据?G的存储空间?</p> <p>    SQL Server 2005——工作组版不是自由发布的。它的设计着眼点在于服务器消息块协议QSMBQ和分部门解x案。在量化性能上,它更优于SQL Server 2005 ExpressQƈ能提供关pL据库的支持,只是~少分析服务。工作组版限用于两个CPUQ?G内存Q数据库大小不限?</p> <p>    2. 新的子系l?</p> <p>    在一些新的子pȝ的推动下QSQL Server 2005中的应用E序支持非常强大Q其中包括整合服务、提醒服务、服务代理和报告服务?</p> <p>    整合服务——与之前负责此功能的DTS相比Q速度?00%。SQL Server整合服务是拥有强大的工作控制能力的企业UETLq_?</p> <p>    提醒服务——可以提供搭定义提醒E序的应用框架?</p> <p>    服务代理——ؓ建立高度量化E序提供异步q程处理功能?</p> <p>    报告服务——这是最值得升的一功能。报告服务是企业U的报告生成q_Q可以对设计、布|Ӏ销售进行详l的报告。强大的ReportBuilderlg可以让最l用户也享受到报告服务?</p> <p>    3.整合全新?NET Framework </p> <p>    对SQL Server 2005q行的最大的强化是整合?NET Framework。启用新?NET整合功能后,你可以轻村֜创徏存储q程、函数、触发器、自定义cd、自定义数据集。你可以在Q?NET语言下用EXEC sp_configure ‘clr enabled' , ?'命o启用CLR支持。如果你q在使用q去的未理的扩展存储过E,应该立即用SQLCLR存储q程代替?</p> <p>    3. 新的数据cd </p> <p>    SQL Server 2005中添加了两种新的数据cdQxml和varbinary(max)?</p> <p>    Xml数据cd——可以用于在SQL Server数据库中存储cd化或非类型化的XML数据Qƈ通过Xqueryq行查询?</p> <p>    Varbinary(max)数据cd——可以像讉K普通数据一样对囑փ{二q制数据q行存储和读取?</p> <p>    4. 新的点对点事务型映射 </p> <p>    通过SQL Server 2005中的新功能,我们可以L掌握微YҎ作出的q一最大改动。点对点事务型映是针对双向映射设计的,可以使两个或多个数据库之间在L一个确认生改动时保持同步?</p> <p> <br />SQL Server 2005~少的功?</p> <p>    6.数据镜像 </p> <p>    毫无疑问Q数据镜像是自从SQL Server?005q?1月发布的RTM版本以来一直被人想늚功能Q因为它是企业下定军_升至SQL Server 2005的主要原因之一。预计这一功能会在2006q下半年重新加入?</p> <p>    7.SQL快速管理器 </p> <p>    快速管理器试图为SQL Server 2005 Express提供囑Ş化的理界面。然而它的功能有限,q行~慢Q微软不得不在SQL Server Management Studio中放弃了它,q新命名ؓExpress?</p> <p>    如何扑ֈSQL Server 2005的这些功? </p> <p>    如果你是W一ơ用SQL Server 2005Q或怼被大量的新功能和界面改动弄得D~ؕ。与M一个版本相比,SQL Server 2005所做出的改动都是最大的。你会发现在SQL Server 2000或SQL Server 7中习惯用的工具都被修改或去除了?</p> <p>    8.SQL Server服务理?</p> <p>    在你升到SQL Server 2005之后Q你或许会有疑问Q升U真的完成了吗?因ؓ你会发现pȝ图标中的服务理器不见了。SQL Server服务理器已l被替换成了SQL Server配置理器,可以通过“开?>E序->SQL Server 2005->理工具->SQL Server配置理器”,或者右键点几Z我的电?>理”,然后打开服务与配|选项卡运行?</p> <p>    9.企业理?</p> <p>    要找到新的管理器有一炚w烦,但你很快会发现在SQL Server 2005中,SQL Server企业理器(SEMQ已l被SQL Server理中心 (SSMS)代替了。在对大量对象和服务器的理中,SSMS的运行速度更快。一切操作都可以用脚本实现。而且多数对话框不是传l的对话框模式,你可以更好地同时应付多个d?</p> <p>    10.查询分析?</p> <p>    对开发h员和数据库管理员来说最重要的查询分析器已经换成了查询编辑器。你可以在管理中心中选择新徏查询来调用它。查询编辑器提供了编写和q行T-SQL查询语句的分析器基本功能Qƈ可以与SourceSafe整合q行版本控制。然而,查询~辑器缺调试T-SQL语句的功能。你需要用Visual Studio 2005的数据库目来进行调试?</p> <p>    11.分析服务理?</p> <p>    在SQL Server 2005中,微Yd改变了分析服务的理和开发配|。以往的分析服务管理器被SSMS和商业智能开发中?BIDS)所代替。分析服务的理由SSMS处理Q创建和部v立方体结构等开发Q务由BIDS处理?</p> <p>    12.DTS设计?</p> <p>    在SQL Server 2005中,DTS被SQL Server整合服务(SSIS)所代替。在处理q程中,以往的DTS设计器被新的SSIS设计器所代替。SQL Server 2000中,DTS设计器是在企业管理器中启动。而SSIS设计器是在BIDS中启动。打开BIDSQ选择“文?>新徏->目->商业目->整合服务目”以启动SSIS设计器?</p> <p>    13.导入/导出向导 </p> <p>    菜单里没有了q个选项Q但它ƈ没有被删除,你可以在命o行模式下q行dtswizard.exe扑ֈ它(别被字面蒙骗Q这个程序是使用SSIS的,不是DTSQ。你也可以打开一个SSIS目Q右键点击SSIS包来启动导入/导出?<br /><br />来源QCSDN<br /></p> <img src ="http://www.tkk7.com/SIDNEY/aggbug/75585.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/SIDNEY/" target="_blank">渠上?/a> 2006-10-17 13:18 <a href="http://www.tkk7.com/SIDNEY/archive/2006/10/17/75585.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>升到SQL Server 2005 ?0大理? 选择?wangchinaking ?Blog http://www.tkk7.com/SIDNEY/archive/2006/09/21/71004.html渠上?/dc:creator>渠上?/author>Thu, 21 Sep 2006 01:59:00 GMThttp://www.tkk7.com/SIDNEY/archive/2006/09/21/71004.htmlhttp://www.tkk7.com/SIDNEY/comments/71004.htmlhttp://www.tkk7.com/SIDNEY/archive/2006/09/21/71004.html#Feedback0http://www.tkk7.com/SIDNEY/comments/commentRss/71004.htmlhttp://www.tkk7.com/SIDNEY/services/trackbacks/71004.html前言
 
SQL Server 2000从上市到现在已经整整五个q头。现在望眼欲I的SQL Server 2005 l于发布了。五q磨一剑,SQLServer 2005 是微Yh里程性质的企业数据库品。本文从用户兛_的技术要点出发比较和讨论SQL Server 2005 相对它的前版本SQL Server 2000所做的重大改进或新增功能,介绍了SQL Server 2005 中最值得你ؓ之升U的10 个理由。无Z是想了解或学习SQL Server 2005Q还是正在评估或考虑升到SQL Server 2005Q本文都对您有很好的参考作用?br /> 
升理由一Q数据分?br /> 
    只有C2005 版本SQL Server才拥有了真正的表和烦引数据分区技术。这个技术一下子使SQL Server数据库从“青壮年”成长ؓ成熟的企业数据库品,是一个里E碑性质的标志。数据分区技术极大加Z表的可׾~性和可管理性,使得SQLServer 处理量数据的能力有了质的飞跃,是我认ؓ最值得升的一个理由?br /> 
    数据库随着g和业务的发展变得来大。五q前大多数数据库q不q是十几个GB大小Q很超qTBU别的。现在几百个GB大小的数据库pȝ随处可见。如果没有数据分区技术而想对大数据库进行高效管理是很困隄。SQL Server 2005以前版本的一个问题是随着旉的推UL据库来大Q备份需要的I间来多Q如何处理数据库中的历史数据是很手的事情。有些客户可能会使用DELETE语句定期定量删除大表中的历史记录Q如在每个周末备份数据库后删除一个星期以前的所有数据。但是如果表有上千万行十几个GB 大小Q那么用DELETE语句删除数据库中上万行或高达20%数据的话Q其性能很差。如果是? × 24时q行的联机系l做q样的数据维护操作那么还会引h较严重的d问题。另外有些客户针对这个问题直接在Ҏ设计上下功夫Q比如按照年份月份星期设计表Q然后定期把一些过时的历史数据表(注意是“表”)备䆾qDROP掉,使得数据库大以及系l性能都能保持相对E_。但是这U方法有一个弊端,卛_用程序必d相应的配合根据不同的旉讉K对应的表Q增加了数据库管理以及数据库讉K逻辑的复杂性?br /> 
    大表q容易带来性能问题。你也许会想到SQL Server 2000中的本地分区视图或分布式分区视图技术。是的,SQL Server2000 中的已l有分区视图的概念,从SQL Server 7.0开始就有了。可惜分囄一个o厌的地方是其理、设计和开发比较困难,特别是分布式分区视图。如如何更新分布式视囑ְ是个N。所以尽一个设计良好的分区视图pȝ会有很不错的性能改善Q却因ؓJ琐的配|,理和开发得其没有在实际中得到充分应用?br /> 
    现在QSQL Server 2005 引入了真正的数据水^分区技术,上面讨论的数据库增长问题和性能问题p刃而解。这个进步绝对不是一步。数据库的大不再是个问题。你可以Ҏ字段值的范围表和烦引划分ؓ多个分区从而可以轻杄理一个几个TB大小的数据库pȝ。无论数据如何增长,你都可以使用分区技术得数据库大小保持相对E_。其中特别值得U赞的地ҎSQL Server 2005 中分区的理和用非常简单。分区的删除Q添加,拆分、合q和UdQ以及分区的数据装蝲{管理都非常Ҏ。你可以对单独的分区q行l护而不是整个表。如果你需要大量装载数据,那么你可以先把数据ƈ行的装入C个新分区当中Q徏立烦引,然后把该分区合ƈ到当前分Z来。这个动作需要的旉极短。如果你需要删除历史数据,假设你已l设计好了历史数据分区,那么你仅仅需要把该分区移除即可,几乎可以一瞬间完成。分Z使得大型表的q发讉K性能得到改善Q特别是有多个CPU的数据库pȝ。那些需要交叉访问大量数据的查询从分区技术中L不少?
 

升理由二:可编E?/p>

CLR 集成

 

SQL Server 2005的可~程性是值得升的第二个重要理由。从来没有哪一个版本能像SQL Server 2005 q样带来q么多编E方面的变革。说老实话,在我知道的瞬间我是惊呆了。有些变化是革命性的。如CLRQCommon Language Runtime,公共语言q行Ӟ集成。就先说说CLR集成。CLR集成是指你可以用Q何一U?NET 语言~写SQL Server 2005 的存储过E,触发器,函数Q自定义cdQ甚x自定义的聚合函数。估计不数据库软g开发商会ؓq个功能Ƣ呼雀跃。想想以前的扩展存储q程Q编E非怸Ҏ。代码中一不小心就会引起内存泄漏。而且׃扩展存储q程q行在SQL Server 的进E空间中Q不好的代码Ҏ引v讉Kq规QAccess ViolationQ导致SQLServer 异常?/p>


    现在有了CLR 集成Q你可以L利用.NET语言的优势如光向对象的装、承和多态特性,~写出那些需要对数据q行复杂数D或逻辑的代码,如字W串处理Q数据加密算法,XML数据操作{等。由于CLR代码宿于SQL Serverq程Q你可以非常Ҏ讉K数据库中的数据。有了CLRQ你不再局限于T-SQLQ你现在立即拥有?NET 框架cd提供的各U各Lcd例程Q以?NET语言提供的一致的~程模型Q如错误处理。展现在你面前的是一个可以无限扩展的~程I间。你现在需要的仅仅是考虑什么时候用T-SQL 语言Q什么时候用CLR。我猜测那些SQL Server软g开发商几乎会立卛_U到SQLServer 2005 享受数据库编E的便捷?/p>

 

T-SQL 语言增强

 

    SQL Server 2005 中的T-SQL语言有了非常大的改进。其中笔者最为称道的是现在可以用和C++或C#cM的TRYCATCHl构对T-SQL q行错误处理了,大大化了T-SQL错误处理~程。SQL Server 2005以前的版本通过讄@@error变量表示最后的T-SQL 语句执行成功与否。ؓ避免@@error变量被新执行的语句重|,你必Mؓ每一条可能出错的TSQL语句后面立即查或保存@@error变量的|q用相应的G O T O 语句q行跌{Q得代码变得复杂难诅R现在SQLServer 2005 有了TRY-CATCHl构你只需要把相关的一l语句放在TRY块里面即可。如果TRY块里面Q何语句发生错误,׃执行相应的CATCH 块。你甚至可以使用嵌套的TRYCATCH来实现复杂错误处理流E。估计很多T-SQL语言使用者可能就Zq个TRY-CATCH l构而迫不及待地升到SQL Server 2005?/p>


    除了传统的DMLQINSERT/UPDATE/DELETEQ触发器QSQL Server 2005 现在也可以对DDL 语言QCREATE、ALTER或DROP 开头的语句Q创发器了。这对于那些需要对DDL语言执行理d如审总及规范数据库操作的用L别有用。以前很多客户问我如何跟t或避免表的删除操作Q现在终于有了答案。你可以单徏立一个针对DROP 语句的触发器然后在触发器里面ROLLBACK 事务可以回滚DROP 动作了?/p>


    SQL Server 2005 T-SQL 中还有一个很LOUTPUT 子句。现在你不费吹灰之力可以获得INSERT 、UPDATE 或DELETE语句所影响的每行的信息。对于在INSERT或UPDATE操作之后需要检索标识列或计列的值的场合OUTPUT子句非常有用。如获得数据INSERT 后该行的Identity的|产生一些唯一水P验证刚刚插入的数据等{。一个有的例子是Identity值的取得。在SQL Server 2000 中你可以在INSERT 语句后立卌用IDENT_CURRENT()或SCOPE_IDENTITY()函数来得到INSERT 语句的Identity。现在你仅仅需要在INSERT 语句中指定output子句q接得到刚刚插入的Identity|实在太简单了Q不是吗Q?/p>


    SQL Server 2005 中T-SQL 语言新增或加强的功能q有很多。如SQL Server 2005 新增加了一cL名函数RANK/DENSE_RANK/NTILE/ROW_NUMBERQ轻松解决了开发者要求返回数据行中提供行L排序功能。新增的P I V O T 和UNPIVOTq算W得对l果集进行行和列的旋转变换十分简单。公用表表达?CTE)解决了T-SQL语言的递归查询问题Q而用OPENROWSET 语句现在可以直接从文仉面执行大定w操作了。我觉得每一个改q都是那么有针对性,以至于我相信这些T-SQL增强必定是SQL Server开发小l真正聆听数据库开发者心声的l果?/p>

 

升理由三:安全

 

    SQL Server 2005 的安全功能是我认为值得升的第三个理由。SQL Server 2005 的安全达C前所未有的强大水qI有着比以前版本更清晰的安全模型即MQ安全对象和权限。在SQLServer 2000 中是用服务器U权限、数据库角色和数据用h限的混合方式理权限。而SQL Server 2005 l一使用GRANT语句理M对安全对象的权限Q简化了安全理。其中我认ؓ最大的改进是用户和架构QschemaQ分R在SQL Server 2000中如果用户不是DBO 且拥有对象,那么U除该用户将是很ȝ的事情。你需要首先用sp_changeobjectowner改变该用h有的对象所有权Q然后把所有引用该对象的代码做相应的修攏V而在SQL Server 2005 中就不需要这样麻烦了Q因为现在用户不再拥有对象。拥有对象的是schema 而不是用戗数据库中的所有对象都属于某个schema。对象的完整名字是server.database.schema.objectQ符合SQL-99 标准Q而不是以前的server.database.user.object 方式。删除用户仅需要改变schema的owner可以了。不需要修改Q何已存在的数据库讉K代码Q真的很方便。用户和架构分离q有一个好处就是对象的权限理变得单。你可以把某些对象集中于某个架构里面Q然后对该架构设|权限,那么架构里面的所有对象就自动l承了同L权限?/p>

 

    如果你需要保护数据库中的敏感数据Q那么SQL Server2005 中的数据加密功能l对值得考虑。以前不止一ơ有客户问我如何加密数据库中的某些数据,是否可以使用一些内部不公开的函数如PWDENCRYPT加密数据。我的回{是使用Windows的EFSQ加密文件系l)功能加密数据库文件或在应用程序层Ҏ据加密后再存储。现在用h盼已久的数据加密功能l于在SQL Server 2005 中得到实玎ͼ那些有机密数据需要保护的用户值得高兴了。SQL Server 2005不是单的提供一些加密函敎ͼ而是把市Z已经成熟的数据安全技术引q到数据库中Q有一个清晰的加密层次l构。SQL Server 2005 支持证书QcertificateQ,非对U密钥和对称密钥法Q一是防止敏感数据被泄漏Q二是防止数据被改。对U密钥支持RC4QRC2QTripleDES 和AES法Q而非对称密钥使用RSA 法。证书其实就是非对称密钥中公钥的容器。密钥管理是安全中比较弱的部分。SQL Server 2005 每一层都使用证书、非对称密钥和对U密钥的l合对它下面的一层进行加密,提高了密钥安全性。出于性能考虑Q一般不用加密强度大的非对称密钥或证书直接加密数据,而是使用对称密钥加密数据获得较快的性能Q然后用证书或非对U密钥加密对U密钥?/p>

 

升理由四:快照隔离

 

    你还在ؓpȝ出现的阻塞(blockingQ或死锁QdeadlockQ现象苦恼吗Q快试试SQL Server 2005 中的快照隔离吧。通过行版本(row versioningQ控制技术,SQL Server 2005 除了原来支持的四U事务隔ȝ别(脏读、提交读、可重复诅R可串行读)外新增了一个快照(SNAPSHOTQ隔ȝ别,有可能d或死锁成为历双ӀSQL Server在TEMPDB中存放不同版本的数据行,select 语句dq些不同版本的行Q读操作不阻塞写数据Q写操作也不dL作,q样那些׃? 写争用导致的大量死锁的系l将从中获得无穷益处。如果你的系l复杂难优化Q那么升U到SQL Server 2005 试试快照隔离U别Q也怼有意想不到的效果?/p>

 

    SQL Server 2005中的快照隔离可细分ؓ两种即READ_COMMITTED_SNAPSHOT和ALLOW_SNAPSHOT_ISOLATION。徏议大家多使用前者,因ؓ已提交读隔离可用于大多数现有应用E序Q而不需要进行Q何更改,其占用的TEMPDBI间也少。可以预见如果用快照隔ȝ别,那么需要特别关注TEMPDB的大和性能。你也许需要把TEMPDB攑֜有够空间的单独盘上以提高性能?/p>

 

    考虑到快照隔d避免d和死锁方面的作用Q我把它作ؓ升的第四个理由?/p>

 

升理由五:数据库镜?/p>

 

    对于那些要求高可用性的用户来说Q数据库镜像也许是考虑升的唯一理由。SQL Server 2005的前版本在高可用性方面提供了故障转移集QFailover ClusterQ和Log shippingҎ。群集方案的一个好处是在一台机器发生问题时它可以提供极快的故障转移能力Q在备䆾服务器上联机数据库,应用E序只需重新q接卛_。群集方案的一个缺Ҏ数据库放在共享盘上,有单点失效这个缺点,一旦共享盘p|导致整个系l崩溃。所以群集方案一般都要结合严紧的备䆾Ҏ一起用。而logshippingpȝ有一个时间上的gq,且如果日志备份很大,传送速度也是个问题。SQL Server 2005引入的数据库镜像可作为故障{Uȝ集或Log shipping 的替代或补充Ҏ来提高数据库的高可用性。镜像的主要优点是它比前两者更Ҏ理Q没有群集的单点失效~点,也没有log shipping 的时间gq。镜像服务器可以攑֜很远的地方,提高了作为备份服务器的高可用性?/p>


    数据库镜像需要两台或三台服务器。主服务器通过传送事务日志中的每个事务到镜像服务器来q行数据同步。每当数据库commit一个事务,该事务就会被同步到镜像服务器。如果事务安全设|ؓFULLQ传送操作将为同步操作。同步操作可以确保将提交的事务提交给两个服务器,但可能会增加事务提交的时间。如果事务安全设|ؓOFFQ操作将为异步操作。事务会在不{待镜像服务器的情况下提交,q将不媄响主服务器事务的提交旉Q但不能保镜像也提交了该事务,所以在出现故障那一L可能有部分日志丢失。对于需要严格同步数据的镜像pȝ可以采取同步模式。而仅仅希望有个备份服务器又不影响性能的情况下可以使用异步模式Q高性能模式Q。无论那U模式,一旦主服务器出现问题,你可以手动实现故障{UL配置pȝ实现自动故障转移?/p>

 

升理由六:商务BI 增强

 

    SQL Server 2005 对已l有或打开发基于SQL Server 的商务智能方案的用户吸引力极大。SQL Server 2005中有兛_务智能方面的增强很多Q是升的很好理由。首先是传统的DTSQData Transformation ServicesQ被新的ISQIntegration ServicesQ代ѝSQL Server 2000 中的DTS用来在不同服务器之间转移数据Q但对于复杂重复的工作流DTS倍感吃力。IS重新改写了DTS的数据流引擎Q引入提取、{换和加蝲QETLQ数据的新编E体p,数据流与控制流分开Q开发能力大大加强,包部|Ӏ管理和性能斚w也比DTS上了一个数量。笔者看来,DTSl于从原来的打闹成长为成熟的IS 数据集成服务体系?/p>


    分析服务QAnalysis ServicesQ在SQL Server 2005 中也有很多改q。原来没有profiler惌t分析服务里面的语句非常痛苦。现?005 l于支持profiler了。ProfilerҎ能调优和排查错误将非常有用。分析服?005 真正具备了实时分析能力,新增加了四种数据挖掘法Q也支持.NET语言q行开发(如存储过E等Q。至于报表服务,2005 版本中添加了报表生成器和模型设计器这两个新工P支持报表拖拉设计?005 的报表改q如新的打印功能、多值参数等。设计过报表的h员会深深知道多值参数的妙处?/p>

 

    另外Q无论是IS、报表服务等都可以在cMVisual Studio的环境中开发,d完成不过鼠标拖拉之间Q非常容易上手?/p>

 

升理由七:全文搜烦增强

 

    相对前版本SQL Server 2005中性能提升最多的部分当数全文索。SQL Server 2000 中的全文本检索和SQL Server 7.0中的差别不大Q处于能用的水^。在SQL Server 2000中用全文检索一个最大的痛苦是徏立全文烦引的性能不好Q需要的旉太长Q特别是在表很大的情况下。一个几千万行数据的表也讔R要数个小时到数天旉才能完成全文索引的徏立。SQL Server 2005全文索在开发的时候就集中于三点:性能Q集成,和可扩展性。据开发小lh员的单测试,原来在SQL Server 2000中徏立全文烦引需?4天的表,现在只需要几个小Ӟ几乎有上癑ր的性能提升Q只能用“惊异”来形容。其相关的全文检索语句也?0Q~50Q甚x高的性能提高。性能斚w的提高得益于全新设计的全文检索引擎。其中关键的一点设计是全文索引擎现在用共享内存和SQL Server q行数据大规模ƈ发交互,而不是原来基于逐行的方式,使得性能上了好几个数量?/p>

 

    除了性能QSQL Server 2005 中的全文索引的集成性也大大加强。在SQL Server 2000 中很隑֯全文索进行备份。一旦有数据库恢复或UdQ你得重新重建烦引。对于几百个GB的数据库Q重建烦引几乎是不能接受的恶梦。现在终于可以和数据库一起备份和恢复全文索引了。你不再需要在恢复数据库后重徏全文索引了!恶梦l于成ؓ历史。除了可以备份外Q你也可以方便的改变全文索引的磁盘位|。你甚至可以在一个热备机器上把全文烦引徏立好Q然后copy q个索引到生产服务器上用?/p>

 

升理由八:可用性功能增?/p>

 

    索引联机操作。除了数据库镜像QSQL Server 2005 中可用性还有很多其他提高。烦引现在可以用ONLINE关键字进行在U徏立或重徏或删除了。它的技术要Ҏ在内存里面动态生成烦引的另一个副本从而不影响原来查询的进行。一旦烦引副本完成操作即替代原来索引成ؓ当前索引。我认ؓ索引联机操作的意义是很大的,因ؓ很多数据库系l都有定期调整或l护索引斚w的需求。有?005 你无需担心业务的正常运行而大胆的对烦引进行维护或修改?/p>

 

    |验和。SQL Server 2005中的数据库页引入校验和增Z数据的可靠性。除了原来SQL Server 2000 中已有的TORN_PAGE_DETECTION 外,SQL Server 2005 新增实现了页的检验和QCHECKSUMQ。你使用ALTER DATABASE语句的SET PAGE_VERIFY子句卛_指定。它的原理是向磁盘中写入8K数据面ӞSQL Server计算整个8K面内容的校验和q将该值存储在头中。再ơ从盘中读取页ӞSQL Server动态计读取到的页面内容的校验和,q与存储在页头中的校验和D行比较。如果不相等则意味着面有物理损坏,需要检查IOg。另外设|检验和的另一个好处是q可以在备䆾和还原操作过E中使用RESTORE VERIFYONLY语句验证每一数据늚完整性从而确认备份文件没有物理损坏?/p>

 

    在线q原。在数据库的某一部分未恢复前Q用h法对该部分进行访问,但可以访问所有其他数据。SQL Server 2000中如果数据库在还原或recovery当中Q用户不能访问数据库。这样如果数据库很大需要rollback或rollforward的事务很多的话,recovery的时间会出奇的长。SQL Server 2005 的在U还原功能得数据库在很短的旉内变得可用?/p>

 

升理由九:复制增强

 

    SQL Server 2000 中的复制功能已经很好。我q里把复制作为升U的一个理由因为SQL Server 2005在原来的基础上又增添了不的功能。如peer-to-peer对等复制Q可以在参与者之间相互进行复Ӟq样你可以采用对{复制在复制参与者之间徏立某U程度的负蝲q。合q复制现在支持通过HTTPSq行数据同步Q可以方便徏立基于INTERNET 的复制。发布表现在可以使用标准的T-SQL语句如Alter Table{进行结构修改然后被复制而不是仅仅局限于使用sp_repladdcolumn和sp_repldropcolumn存储q程。在SQL Server 2000 中,仅支持向其他数据库(如DB2或OracleQ发布数据,而在SQL Server 2005 中,可将Oracle 数据库直接复制到SQL Server。可以从备䆾中初始化事务性订阅而不是仅仅局限于从快照对复制q行初始化,{等…?/p>

 

升理由十:异步处理能力

 

    SQL Server 2005 通过引入全新的Service Broker 提供了革命性的异步处理能力。Service Broker提供了一个功能强大的异步~程模型。它为数据库应用E序增加了可靠、可扩展、分布式异步功能异步~程Q允许程序仅仅在资源可用时才L行占用大量资源的dQ以此来~短响应旉Q提高吞吐量。在我看来,Broker的最大好处一是异步执行能力,提高了可伸羃性,二是可靠执行Q三是集成于数据库中Q备份数据库备份了broker 的消息队列。SQL Server 2005 中的查询通知是ZService Broker的应用。你可以使用查询通知功能来发送一个命令到SQL Serverh在查询结果发生变化时接收SQL Server的通知。这样就可以只有在程序以前检索的l果发生变化Ӟ才需要重新查询数据库。一个可以预见的应用是在使用~存的Web 站点中。Web站点首先发送语句到数据库服务器Q获得数据,~存到本圎ͼ然后只有在收到查询通知的时候才清理~存Q重新查询数据。这个机刉免了重复轮询SQL ServerQ大大减M服务器的负蝲Q也提高了Web 站点的׾~性?/p>

 

    因ؓSQL Server 2005 的Service Broker带来了数据库~程异步处理能力的革命,我把它作为升U的W十个理由?/p>

 

ȝ?/p>

 

    上面列出的十大理׃仅是ZW者的考虑Qƈ没有囊括SQL Server 2005 所有的功能。SQL Server 2005 q有其他很多非常优秀或重大的改进。比如支持通过HTTP SOAP协议直接讉K数据库,增加XML数据cdQ支持XqueryQ用新的SQL ServerManagement Studio {等。有一Ҏ必须提一下,是现在可以调用sp_create_plan_guide来强制指定SQL ServerL使用某个执行计划q行语句Q避免SQL Server动态生成不够优化的查询计划Q实在太了。在W者看来,SQL Server 2005 带来的好处远q大于升U导致的工作量,升到SQL Server 2005 是迟早的事情。早升早拥有,对SQL Server 2005Q你准备好了吗?

 

作者BlogQ?a >http://blog.csdn.net/wangchinaking/



]]>
sp_fulltext_catalog (Transact-SQL) http://www.tkk7.com/SIDNEY/archive/2006/08/02/61306.html渠上?/dc:creator>渠上?/author>Wed, 02 Aug 2006 02:27:00 GMThttp://www.tkk7.com/SIDNEY/archive/2006/08/02/61306.htmlhttp://www.tkk7.com/SIDNEY/comments/61306.htmlhttp://www.tkk7.com/SIDNEY/archive/2006/08/02/61306.html#Feedback0http://www.tkk7.com/SIDNEY/comments/commentRss/61306.htmlhttp://www.tkk7.com/SIDNEY/services/trackbacks/61306.htmlA. 创徏全文目录

此示例在 AdventureWorks 数据库中创徏一个空的全文目?Cat_Desc?/p>

USE AdventureWorks;
GO
EXEC sp_fulltext_catalog 'Cat_Desc', 'create';
GO

B. 重新生成全文目录

此示例在 AdventureWorks 数据库中重新生成现有的全文目?Cat_Desc?/p>

USE AdventureWorks;
GO
EXEC sp_fulltext_catalog 'Cat_Desc', 'rebuild';
GO

C. 启动全文目录的填?/h3>

此示例将开?Cat_Desc 目录的完全填充?/p>

USE AdventureWorks;
GO
EXEC sp_fulltext_catalog 'Cat_Desc', 'start_full';
GO

D. 停止全文目录的填?/h3>

此示例将停止 Cat_Desc 目录的填充?/p>

USE AdventureWorks;
GO
EXEC sp_fulltext_catalog 'Cat_Desc', 'stop';
GO

E. 删除全文目录

此示例将删除 Cat_Desc 目录?/p>

USE AdventureWorks;
GO
EXEC sp_fulltext_catalog 'Cat_Desc', 'drop';
GO

http://msdn2.microsoft.com/zh-cn/library/ms189801.aspx



]]>
excel 数据库导入到 sqlserver http://www.tkk7.com/SIDNEY/archive/2006/07/05/56827.html渠上?/dc:creator>渠上?/author>Wed, 05 Jul 2006 09:18:00 GMThttp://www.tkk7.com/SIDNEY/archive/2006/07/05/56827.htmlhttp://www.tkk7.com/SIDNEY/comments/56827.htmlhttp://www.tkk7.com/SIDNEY/archive/2006/07/05/56827.html#Feedback0http://www.tkk7.com/SIDNEY/comments/commentRss/56827.htmlhttp://www.tkk7.com/SIDNEY/services/trackbacks/56827.htmlselect * from

OPENROWSET ( 'MICROSOFT.JET.OLEDB.4.0'

, 'Excel 8.0;HDR=YES;IMEX=2;DATABASE=C:\Documents and Settings\xiongh\ 桌面 \ 今日投资通信?/span> .xls' , [sheet1$])

OR
 
 SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
 'Data Source=D:\ZJS.xls;Extended Properties=Excel 8.0')...[Sheet1$]

http://support.microsoft.com/kb/321686/zh-cn



]]>
join 使用详解方式 http://www.tkk7.com/SIDNEY/archive/2006/04/03/38923.html渠上?/dc:creator>渠上?/author>Mon, 03 Apr 2006 05:54:00 GMThttp://www.tkk7.com/SIDNEY/archive/2006/04/03/38923.htmlhttp://www.tkk7.com/SIDNEY/comments/38923.htmlhttp://www.tkk7.com/SIDNEY/archive/2006/04/03/38923.html#Feedback0http://www.tkk7.com/SIDNEY/comments/commentRss/38923.htmlhttp://www.tkk7.com/SIDNEY/services/trackbacks/38923.html  join 方式
Q?) cross join
      参与select语句所有表的的所有行的笛卡尔乘积
      select au_lname ,title
      from authors cross join  titiles

     outer  join 对参与join的两个表有主从之分,处理方式以主表的每条数据去match 从属表的列,合乎条g的数据是我们所要的{案Q不合乎条g的也是我们要的答案,只不q哪些从属表选取的列被Mnull?br />(2) left join
     左边的ؓ主表Q右边ؓ从属?br />     select a.cust_id ,b.order_date,b.tot_ant
     from customer a left join sales b
     on (a.cust_id =b.cust_id and b.order_date>''1996/10/15'')
     可以写ؓ
     select a.cust_id,b.order_date,b.tot_ant
     from custom a
     left join (select * from sales where order_date>''1996/10/15'') b
    on a.cust_id =b.cust_id  
(3) right join
     左边的表Z属表Q右边的表ؓ主表
(4) self join
     self join 常用在同一表内不同数据间对同一列的比较
    select a.emp_no,a.emp_name,b.emp_no,b.emp_name,a.date_hired
    from employee a
    join employee b
    on (a.emp_no!=b.emp_no and a.date_hired=b.date_hired)
    order by a.date_hired
   q样会重复数据,只要加上一?and a.emp_name>b.emp_name
(5) full join
     不仅列出W合条g的数据,两边未符合join条g的数据也会一q列出。哪些未W合join条g的数据如果在select列中无法得到对应的值则填上null
    select a.cust_id,b.tot_amt
    from customer a full join sales b
    on a.cust_id=b.cust_id
有表
 id   ic  name  amount
      I    *        *
      c
      i
      c
      i
      i  
   要求l果为?
    ic  name  amount  ic   name  amount
    i                         c
    i                         c
    i
    i
  select aaa.*,bbb.*
  from ( select (select count(id) from  aa as  b where (b.id<a.id) and (ic=''i'')) as     newid, * from aa a where ic=''i'') aaa
  full join
   (select (select count(id) from aa as b where b.id<a.id and ic=''c'') as newid,* from
 aa a where ic=''c'') bbb
on aaa.newid=bbb.newid
order by aaa.name
6.使用 HASH ?MERGE 联接提示
此示例在 authors、titleauthors ?titles 表之间徏立三表联接,以生成一个作者及其著作的列表。查询优化器使用 MERGE 联接?authors ?titleauthors (A x TA) 联接在一赗然后,?authors ?titleauthors MERGE 联接 (A x TA) 的结果与 titles 表进?HASH 联结以生?(A x TA) x T?/p>


重要  指定联接提示后,要执?INNER JOIN ?INNER 关键字不再ؓ可选,而必L式说明?/p>


USE pubs
SELECT SUBSTRING((RTRIM(a.au_fname) + '' '' + LTRIM(a.au_lname)), 1, 25)
   AS Name, SUBSTRING(t.title, 1, 20) AS Title
FROM authors a INNER MERGE JOIN titleauthor ta
   ON a.au_id = ta.au_id INNER HASH JOIN titles t
   ON t.title_id = ta.title_id
ORDER BY au_lname ASC, au_fname ASC

下面是结果集Q?/p>

Warning: The join order has been enforced because a local join hint is used.
Name                      Title               
------------------------- --------------------
Abraham Bennet            The Busy Executive''s
Reginald Blotchet-Halls   Fifty Years in Bucki
Cheryl Carson             But Is It User Frien
Michel DeFrance           The Gourmet Microwav
Innes del Castillo        Silicon Valley Gastr
...                    ...
Johnson White             Prolonged Data Depri
Akiko Yokomoto            Sushi, Anyone?      

(25 row(s) affected)

(7)Inner Join

Inner Join 逻辑q算W返回满第一个(端Q输入与W二个(底端Q输入联接的每一行?/p>

作者BlogQ?a >http://blog.csdn.net/softj/



]]>
OLAPhttp://www.tkk7.com/SIDNEY/archive/2006/04/03/38842.html渠上?/dc:creator>渠上?/author>Mon, 03 Apr 2006 02:39:00 GMThttp://www.tkk7.com/SIDNEY/archive/2006/04/03/38842.htmlhttp://www.tkk7.com/SIDNEY/comments/38842.htmlhttp://www.tkk7.com/SIDNEY/archive/2006/04/03/38842.html#Feedback0http://www.tkk7.com/SIDNEY/comments/commentRss/38842.htmlhttp://www.tkk7.com/SIDNEY/services/trackbacks/38842.html 
(转蝲自北大高U网站,http://www.pku-ht.com/)

联机分析处理 (OLAP) 的概忉|早是由关pL据库之父E.F.Codd?993q提出的Q他同时提出了关于OLAP?2条准则。OLAP的提出引起了很大的反响,OLAP作ؓ一cM品同联机事务处理 (OLTP) 明显区分开来?br />
    当今的数据处理大致可以分成两大类Q联Z务处理OLTPQon-line transaction processingQ、联机分析处理OLAPQOn-Line Analytical ProcessingQ。OLTP是传l的关系型数据库的主要应用,主要是基本的、日常的事务处理Q例如银行交易。OLAP是数据仓库系l的主要应用Q支持复杂的分析操作Q侧重决{支持,q且提供直观易懂的查询结果。下表列ZOLTP与OLAP之间的比较?br />

OLTP
OLAP
用户
操作人员,低层理人员
决策人员,高񔽎理人员
功能
日常操作处理
分析决策
DB 设计
面向应用
面向主题
数据
当前? 最新的l节? 二维的分立的
历史? 聚集? 多维的集成的, l一?/div>
存取
?写数十条记录
M百万条记?/div>
工作单位
单的事务
复杂的查?/div>
用户?/div>
上千?/div>
上百?/div>
DB 大小
100MB-GB
100GB-TB
    
     OLAP是分析人员、管理h员或执行人员能够从多角度对信息进行快速、一致、交互地存取,从而获得对数据的更深入了解的一cY件技术。OLAP的目标是满决策支持或者满_多维环境下特定的查询和报表需?它的技术核心是"l?q个概念?br />
    “维”是Z观察客观世界的角?是一U高层次的类型划分。“维”一般包含着层次关系,q种层次关系有时会相当复杂。通过把一个实体的多项重要的属性定义ؓ多个l?dimension)Q用户能对不同l上的数据进行比较。因此OLAP也可以说是多l数据分析工L集合?br />
    OLAP的基本多l分析操作有dQroll up和drill downQ、切片(sliceQ和切块QdiceQ、以及旋转(pivotQ、drill across、drill through{?br />
·d是改变维的层ơ,变换分析的粒度。它包括向上dQroll upQ和向下dQdrill downQ。roll up是在某一l上低层次的细节数据概括到高层ơ的汇L据,或者减维敎ͼ而drill down则相反,它从汇L据深入到l节数据q行观察或增加新l?br />·切片和切块是在一部分l上选定值后Q关心度量数据在剩余l上的分布。如果剩余的l只有两个,则是切片Q如果有三个Q则是切块?br />·旋{是变换维的方向,卛_表格中重新安排维的放|(例如行列互换Q?

    OLAP有多U实现方法,Ҏ存储数据的方式不同可以分为ROLAP、MOLAP、HOLAP?br />
    ROLAP表示Z关系数据库的OLAP实现QRelational OLAPQ。以关系数据库ؓ核心,以关pdl构q行多维数据的表C和存储。ROLAP多l数据库的多l结构划分ؓ两类?一cL事实?用来存储数据和维关键?另一cLl表,卛_每个l至用一个表来存攄的层ơ、成员类别等l的描述信息。维表和事实表通过d键字和外关键字联pd一?形成?星型模式"。对于层ơ复杂的l?为避免冗余数据占用过大的存储I间,可以使用多个表来描述,q种星型模式的扩展称?雪花模式"?br />
    MOLAP表示Z多维数据l织的OLAP实现QMultidimensional OLAPQ。以多维数据l织方式为核?也就是说,MOLAP使用多维数组存储数据。多l数据在存储中将形成"立方块(CubeQ?的结?在MOLAP中对"立方??旋{"?切块"?切片"是生多l数据报表的主要技术?br />
    HOLAP表示Z混合数据l织的OLAP实现QHybrid OLAPQ。如低层是关pd的,高层是多l矩阵型的。这U方式具有更好的灉|性?br />
q有其他的一些实现OLAP的方法,如提供一个专用的SQL ServerQ对某些存储模式Q如星型、雪片型Q提供对SQL查询的特D支持?br />
    OLAP工具是针对特定问题的联机数据讉K与分析。它通过多维的方式对数据q行分析、查询和报表。维是h们观察数据的特定角度。例如,一个企业在考虑产品的销售情冉|Q通常从时间、地区和产品的不同角度来深入观察产品的销售情c这里的旉、地区和产品是l。而这些维的不同组合和所考察的度量指标构成的多维数组则是OLAP分析的基Q可形式化表CZؓQ维1Q维2Q……,lnQ度量指标)Q如Q地区、时间、品、销售额Q。多l分析是指对以多lŞ式组lv来的数据采取切片QSliceQ、切块(DiceQ、钻取(Drill-down和Roll-upQ、旋转(PivotQ等各种分析动作Q以求剖析数据,使用戯从多个角度、多侧面地观察数据库中的数据Q从而深入理解包含在数据中的信息?br />
    Ҏl合性数据的l织方式的不同,目前常见的OLAP主要有基于多l数据库的MOLAP及基于关pL据库的ROLAP两种。MOLAP是以多维的方式组l和存储数据QROLAP则利用现有的关系数据库技术来模拟多维数据。在数据仓库应用中,OLAP应用一般是数据仓库应用的前端工P同时OLAP工具q可以同数据挖掘工具、统计分析工具配合用,增强决策分析功能?/span>



]]>
վ֩ģ壺 ɫwwwƵ߹ۿ| ˾Ʒþ| ÿձƬ35| Ʒtvþþþþþ| վ| ɫҹƵ| ѹۿ| 뾫Ʒ123ѿ| պƬѹۿվ | ձһ| ѻɫַ| Ļ˾Ʒһվ| ŮƵȫ| ģ߹ۿ | Ʒϵ߹ۿ| ձػɫAAAƬ| һؼŮ18ëƬƵ| jizzѹۿƵ| ŮAëƬƵ| 㶮߹ۿվ| 69Ƶѹۿl| ˬˬˬƵ| ߹ۿ91Ʒ| jjzz߲Ź| ޾þþþþAV| ޹һƷ| ۺϼƵ| һһһ| ɫaAV| wwwѸƵ| Ļ| èwww˳| AV߹ۿ| ޹avӰ| һƷƵ| ɫaAV| 91Ƶѹۿۿ| 99߹ۿƵ| ҹ߹ۿ| Ʒmnbavվ | 2022˾Ʒ|