﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Luben Park-随笔分类-数据库相关</title><link>http://www.blogjava.net/Ben/category/9154.html</link><description>Java Ben 成长之路</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 04:12:08 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 04:12:08 GMT</pubDate><ttl>60</ttl><item><title>表名作为参数传递的存储过程写法</title><link>http://www.blogjava.net/Ben/archive/2006/11/16/81560.html</link><dc:creator>Ben</dc:creator><author>Ben</author><pubDate>Thu, 16 Nov 2006 08:49:00 GMT</pubDate><guid>http://www.blogjava.net/Ben/archive/2006/11/16/81560.html</guid><wfw:comment>http://www.blogjava.net/Ben/comments/81560.html</wfw:comment><comments>http://www.blogjava.net/Ben/archive/2006/11/16/81560.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Ben/comments/commentRss/81560.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Ben/services/trackbacks/81560.html</trackback:ping><description><![CDATA[
		<p>SET QUOTED_IDENTIFIER ON <br />GO<br />SET ANSI_NULLS ON <br />GO</p>
		<p> </p>
		<p>--=================================================================<br />-- 描述：～～～～～～～～～～～～～～～～～～～～～～～～～～～<br />-- 作者：鲁湘<br />-- @tableName   该模板对应的数据库表<br />-- @RecordID    业务处理需要寻找表中记录的ID号码<br />--=================================================================</p>
		<p>ALTER    PROCEDURE WF_QingJia<br />   (@tableName varchar(50),@recordID varchar(50))<br />AS<br />-- 获取表中的业务数据值<br />DECLARE @money varchar(100),  -- 业务逻辑需要的值<br /> @sqls nvarchar(4000)  -- 保存组合SQL语句</p>
		<p>SET @sqls='SELECT @a=Money FROM <a href="mailto:'+@tableName">'+@tableName</a> +' WHERE ID <a href="mailto:='+@recordID">='+@recordID</a></p>
		<p>EXECUTE sp_executesql @sqls,N'@a varchar(50) output',@money output</p>
		<p>-- 根据值进行相应的业务处理<br />print @money<br />UPDATE WF_FormBill SET [Money]='真的被处理了' WHERE [ID]=@recordID</p>
		<p> </p>
		<p>GO<br />SET QUOTED_IDENTIFIER OFF <br />GO<br />SET ANSI_NULLS ON <br />GO<br /></p>
<img src ="http://www.blogjava.net/Ben/aggbug/81560.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Ben/" target="_blank">Ben</a> 2006-11-16 16:49 <a href="http://www.blogjava.net/Ben/archive/2006/11/16/81560.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]经典SQL语句--收藏  http://blog.ourtw.com/article.php?tid_600.html</title><link>http://www.blogjava.net/Ben/archive/2006/04/06/39588.html</link><dc:creator>Ben</dc:creator><author>Ben</author><pubDate>Thu, 06 Apr 2006 07:01:00 GMT</pubDate><guid>http://www.blogjava.net/Ben/archive/2006/04/06/39588.html</guid><wfw:comment>http://www.blogjava.net/Ben/comments/39588.html</wfw:comment><comments>http://www.blogjava.net/Ben/archive/2006/04/06/39588.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Ben/comments/commentRss/39588.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Ben/services/trackbacks/39588.html</trackback:ping><description><![CDATA[经典SQL语句--收藏 <br />[个人收藏]经典SQL语句.值得收藏<br />精典的SQL语句，推荐收藏<br />在网上经常转,常常看到有些人为了求得某些SQL语句而焦头烂额,现在我特别把自己收藏的一些比较精典的SQL拿出来和大家分享一下<br /><br />1. 行列转换--普通<br /><br />假设有张学生成绩表(CJ)如下<br />Name   Subject   Result<br />张三   语文     80<br />张三   数学     90<br />张三   物理     85<br />李四   语文     85<br />李四   数学     92<br />李四   物理     82<br /><br />想变成   <br />姓名   语文   数学   物理<br />张三   80   90   85<br />李四   85   92   82<br /><br />declare @sql varchar(4000)<br />set @sql = ''select Name''<br />select @sql = @sql + '',sum(case Subject when ''''''+Subject+'''''' then Result end) [''+Subject+'']''<br />from (select distinct Subject from CJ) as a<br />select @sql = @sql+'' from test group by name''<br />exec(@sql)<br /><br />2. 行列转换--合并<br /><br />有表A,<br />id pid<br />1   1<br />1   2<br />1   3<br />2   1<br />2   2<br />3   1<br />如何化成表B:<br />id pid<br />1 1,2,3<br />2 1,2<br />3 1<br /><br />创建一个合并的函数<br />create function fmerg(@id int)<br />returns varchar(8000)<br />as<br />begin<br />declare @str varchar(8000)<br />set @str=''''<br />select @str=@str+'',''+cast(pid as varchar) from 表A where id=@id set @str=right(@str,len(@str)-1)<br />return(@str)<br />End<br />go<br /><br />--调用自定义函数得到结果<br />select distinct id,dbo.fmerg(id) from 表A<br /><br />3. 如何取得一个数据表的所有列名<br /><br />方法如下：先从SYSTEMOBJECT系统表中取得数据表的SYSTEMID,然后再SYSCOLUMN表中取得该数据表的所有列名。<br />SQL语句如下：<br />declare @objid int,@objname char(40)<br />set @objname = ''tablename''<br />select @objid = id from sysobjects where id = object_id(@objname)<br />select ''Column_name'' = name from syscolumns where id = @objid order by colid<br /><br />是不是太简单了？ 呵呵 不过经常用阿.<br /><br />4. 通过SQL语句来更改用户的密码<br /><br />修改别人的,需要sysadmin role   <br />EXEC sp_password NULL, ''newpassword'', ''User''<br /><br />如果帐号为SA执行EXEC sp_password NULL, ''newpassword'', sa <br /><br />5. 怎么判断出一个表的哪些字段不允许为空？<br /><br />select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where IS_NULLABLE=''NO'' and TABLE_NAME=tablename <br /><br />6. 如何在数据库里找到含有相同字段的表？<br />a. 查已知列名的情况<br />SELECT b.name as TableName,a.name as columnname <br />From syscolumns   a INNER JOIN   sysobjects b   <br />ON a.id=b.id   <br />AND b.type=''U''   <br />AND a.name=''你的字段名字'' <br /><br />b. 未知列名查所有在不同表出现过的列名<br />Select o.name As tablename,s1.name As columnname <br />From syscolumns s1, sysobjects o <br />Where s1.id = o.id <br />  And o.type = ''U'' <br />  And Exists ( <br />    Select 1 From syscolumns s2   <br />    Where s1.name = s2.name   <br />    And s1.id &lt;&gt; s2.id <br />    )<br /><br />7. 查询第xxx行数据<br /><br />假设id是主键： <br />select * <br />from (select top xxx * from yourtable) aa <br />where not exists(select 1 from (select top xxx-1 * from yourtable) bb where aa.id=bb.id)<br /><br />如果使用游标也是可以的 <br />fetch absolute [number] from [cursor_name] <br />行数为绝对行数<br /><br />8. SQL Server日期计算<br />a. 一个月的第一天<br />SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) <br />b. 本周的星期一<br />SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0) <br />c. 一年的第一天<br />SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) <br />d. 季度的第一天<br />SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0) <br />e. 上个月的最后一天 <br />SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)) <br />f. 去年的最后一天<br />SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)) <br />g. 本月的最后一天<br />SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)) <br />h. 本月的第一个星期一<br />select DATEADD(wk, DATEDIFF(wk,0,                                       <br />                    dateadd(dd,6-datepart(day,getdate()),getdate())     <br />                                                                ), 0)     <br />i. 本年的最后一天<br />SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))。<br />-----------------------------------------------------------------------<br />1.按姓氏笔画排序:<br />Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as <br /><br />2.数据库加密:<br />select encrypt(''原始密码'')<br />select pwdencrypt(''原始密码'')<br />select pwdcompare(''原始密码'',''加密后密码'') = 1--相同；否则不相同 encrypt(''原始密码'')<br />select pwdencrypt(''原始密码'')<br />select pwdcompare(''原始密码'',''加密后密码'') = 1--相同；否则不相同<br /><br />3.取回表中字段:<br />declare @list varchar(1000),@sql nvarchar(1000) <br />select @list=@list+'',''+b.name from sysobjects a,syscolumns b where a.id=b.id and a.name=''表A''<br />set @sql=''select ''+right(@list,len(@list)-1)+'' from 表A'' <br />exec (@sql)<br /><br />4.查看硬盘分区:<br />EXEC master..xp_fixeddrives<br /><br />5.比较A,B表是否相等:<br />if (select checksum_agg(binary_checksum(*)) from A)<br />  =<br />  (select checksum_agg(binary_checksum(*)) from B)<br />print ''相等''<br />else<br />print ''不相等''<br /><br />6.杀掉所有的事件探察器进程:<br />DECLARE hcforeach CURSOR GLOBAL FOR SELECT ''kill ''+RTRIM(spid) FROM master.dbo.sysprocesses<br />WHERE program_name IN(''SQL profiler'',N''SQL 事件探查器'')<br />EXEC sp_msforeach_worker ''?''<br /><br />7.记录搜索:<br />开头到N条记录<br />Select Top N * From 表<br />-------------------------------<br />N到M条记录(要有主索引ID)<br />Select Top M-N * From 表 Where ID in (Select Top M ID From 表) Order by ID Desc<br />----------------------------------<br />N到结尾记录<br />Select Top N * From 表 Order by ID Desc<br /><br />8.如何修改数据库的名称:<br />sp_renamedb ''old_name'', ''new_name'' <br /><br />9：获取当前数据库中的所有用户表<br />select Name from sysobjects where xtype=''u'' and status&gt;=0<br /><br />10：获取某一个表的所有字段<br />select name from syscolumns where id=object_id(''表名'')<br /><br />11：查看与某一个表相关的视图、存储过程、函数<br />select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like ''%表名%''<br /><br />12：查看当前数据库中所有存储过程<br />select name as 存储过程名称 from sysobjects where xtype=''P''<br /><br />13：查询用户创建的所有数据库<br />select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name=''sa'')<br />或者<br />select dbid, name AS DB_NAME from master..sysdatabases where sid &lt;&gt; 0x01<br /><br />14：查询某一个表的字段和数据类型<br />select column_name,data_type from information_schema.columns<br />where table_name = ''表名'' <br /><br />[n].[标题]:<br />Select * From TableName Order By CustomerName <br /><br />[n].[标题]:<br />Select * From TableName Order By CustomerName <br /><img src ="http://www.blogjava.net/Ben/aggbug/39588.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Ben/" target="_blank">Ben</a> 2006-04-06 15:01 <a href="http://www.blogjava.net/Ben/archive/2006/04/06/39588.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL中CONVERT转化函数, Concat , COALESCE的用法</title><link>http://www.blogjava.net/Ben/archive/2006/04/06/39578.html</link><dc:creator>Ben</dc:creator><author>Ben</author><pubDate>Thu, 06 Apr 2006 06:15:00 GMT</pubDate><guid>http://www.blogjava.net/Ben/archive/2006/04/06/39578.html</guid><wfw:comment>http://www.blogjava.net/Ben/comments/39578.html</wfw:comment><comments>http://www.blogjava.net/Ben/archive/2006/04/06/39578.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Ben/comments/commentRss/39578.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Ben/services/trackbacks/39578.html</trackback:ping><description><![CDATA[
		<p>SQL中CONVERT转化函数的用法</p>
		<p>CONVERT的使用方法:</p>
		<p>////////////////////////////////////////////////////////////////////////////////////////</p>
		<p>格式:<br />CONVERT(data_type,expression[,style])</p>
		<p>说明:<br />此样式一般在时间类型(datetime,smalldatetime)与字符串类型(nchar,nvarchar,char,varchar)<br />相互转换的时候才用到.</p>
		<p>例子:<br />SELECT CONVERT(varchar(30),getdate(),101) now<br />结果为<br />now<br />---------------------------------------<br />09/15/2001</p>
		<p>/////////////////////////////////////////////////////////////////////////////////////</p>
		<p>style数字在转换时间时的含义如下</p>
		<p>-------------------------------------------------------------------------------------------------<br />Style(2位表示年份) | Style(4位表示年份) | 输入输出格式 <br />-------------------------------------------------------------------------------------------------<br />- | 0 or 100 | mon dd yyyy hh:miAM(或PM) <br />-------------------------------------------------------------------------------------------------<br />1 | 101 | mm/dd/yy <br />-------------------------------------------------------------------------------------------------<br />2 | 102 | yy-mm-dd <br />-------------------------------------------------------------------------------------------------<br />3 | 103 | dd/mm/yy <br />-------------------------------------------------------------------------------------------------<br />4 | 104 | dd-mm-yy <br />-------------------------------------------------------------------------------------------------<br />5 | 105 | dd-mm-yy <br />-------------------------------------------------------------------------------------------------<br />6 | 106 | dd mon yy <br />-------------------------------------------------------------------------------------------------<br />7 | 107 | mon dd,yy <br />-------------------------------------------------------------------------------------------------<br />8 | 108 | hh:mm:ss <br />-------------------------------------------------------------------------------------------------<br />- | 9 or 109 | mon dd yyyy hh:mi:ss:mmmmAM(或PM)<br />-------------------------------------------------------------------------------------------------<br />10 | 110 | mm-dd-yy <br />-------------------------------------------------------------------------------------------------<br />11 | 111 | yy/mm/dd <br />-------------------------------------------------------------------------------------------------<br />12 | 112 | yymmdd <br />-------------------------------------------------------------------------------------------------<br />- | 13 or 113 | dd mon yyyy hh:mi:ss:mmm(24小时制) <br />-------------------------------------------------------------------------------------------------<br />14 | 114 | hh:mi:ss:mmm(24小时制) <br />-------------------------------------------------------------------------------------------------<br />- | 20 or 120 | yyyy-mm-dd hh:mi:ss(24小时制) <br />-------------------------------------------------------------------------------------------------<br />- | 21 or 121 | yyyy-mm-dd hh:mi:ss:mmm(24小时制) <br />-------------------------------------------------------------------------------------------------<br /><span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: #c60a00; FONT-FAMILY: Arial"><br /><font size="4">concat</font></span><font size="4"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">方法的结果等于</span></font><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><font size="4">:result = string1 + string2 + string3 + … + stringN</font></span></p>
		<p class="MsoCommentText" style="MARGIN: 0cm 0cm 0pt">
				<font size="4">
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: #c60a00; FONT-FAMILY: Arial">COALESCE</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">
						</span>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">返回其参数中第一个非空表达式<br /><br /></span>
				</font>
		</p>
<img src ="http://www.blogjava.net/Ben/aggbug/39578.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Ben/" target="_blank">Ben</a> 2006-04-06 14:15 <a href="http://www.blogjava.net/Ben/archive/2006/04/06/39578.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转帖]SQL Server - [分布式查询/事务]</title><link>http://www.blogjava.net/Ben/archive/2006/03/29/38085.html</link><dc:creator>Ben</dc:creator><author>Ben</author><pubDate>Wed, 29 Mar 2006 08:35:00 GMT</pubDate><guid>http://www.blogjava.net/Ben/archive/2006/03/29/38085.html</guid><wfw:comment>http://www.blogjava.net/Ben/comments/38085.html</wfw:comment><comments>http://www.blogjava.net/Ben/archive/2006/03/29/38085.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Ben/comments/commentRss/38085.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Ben/services/trackbacks/38085.html</trackback:ping><description><![CDATA[
		<strong>
				<font color="#cc3333">分布式查询</font>
		</strong>
		<div>    <font color="#cc3333">OPENROWSET</font></div>
		<div>
				<font color="#990099">    从Excel取数据</font>
		</div>
		<div>
				<font color="#0000ff">    SELECT</font> * <font color="#0000ff">FROM</font><font color="#0000ff"> OPENROWSET</font>(<font color="#ff0000">'Microsoft.Jet.OLEDB.4.0'</font>,<font color="#ff0000">'Excel 8.0;Database=d:\1.xls'</font>,[Sheet1$])</div>
		<div>
				<font color="#990099">    从Oracle取数据</font>
		</div>
		<div>
				<font color="#0000ff">    SELECT</font> *<font color="#0000ff"> FROM OPENROWSET</font>(<font color="#ff0000">'MSDAORA.1'</font>,<font color="#ff0000">'NetServiceName'</font>;'User';'Password',<font color="#ff0000">'SELECT * FROM OracleTalbe'</font>)</div>
		<div> </div>
		<div>    <font color="#cc3333">Linked Server(for Oracle)</font></div>
		<div>    <font color="#990099">建立Linked Server</font></div>
		<div>    <font color="#767676">sp_addlinkedserver</font><font color="#ff0000">'Allies'</font>, <font color="#ff0000">'Oracle'</font>, <font color="#ff0000">'MSDAORA.1'</font>, <font color="#ff0000">'NetServiceName'</font></div>
		<div>    <font color="#990099">Oracle的Login</font></div>
		<div>    <font color="#767676">sp_addlinkedsrvlogin</font><font color="#ff0000">'Allies'</font>, <font color="#0000ff">FALSE</font>, <font color="#ff0000">'SQLServerLogin'</font>, <font color="#ff0000">'OracleUser'</font>, <font color="#ff0000">'OraclePassword'</font></div>
		<div>   <font color="#990099"> 从Oracle查询数据</font></div>
		<div>
				<font color="#990099">    <font color="#0000ff">SELECT</font><font color="#000000">*</font><font color="#0000ff">FROM OPENQUERY</font><font color="#000000">( Allies, </font><font color="#ff0000">'SELECT * FROM OracleTalbe'</font><font color="#000000">)</font>，或者</font>
		</div>
		<div>
				<font color="#990099">    <font color="#0000ff">SELECT</font><font color="#000000">*</font><font color="#0000ff">FROM</font></font>
				<font color="#000000">Allies..OracleUser.OracleTalbe</font>
		</div>
		<div>
				<font color="#990099">    修改Linked Server的Server Option</font>
		</div>
		<div>
				<font color="#990099"> </font>
				<font color="#000000">   <font color="#767676">sp_serveroption</font><font color="#ff0000">'Allies'</font>, <font color="#ff0000">'Option Name'</font>, </font>
				<font color="#ff0000">'Option Value'</font>
		</div>
		<div>  <font color="#990099">  例如</font></div>
		<div>    <font color="#767676">sp_serveroption</font><font color="#ff0000">'OraDC'</font>, <font color="#ff0000">'rpc out'</font>, <font color="#ff0000">'true'</font></div>
		<div>    <font color="#767676">sp_serveroption</font><font color="#ff0000">'OraDC'</font>, <font color="#ff0000">'rpc'</font>, <font color="#ff0000">'true'</font></div>
		<div>
				<font color="#990099">    向Oracle插入数据（还没有用过）</font>
		</div>
		<div>    <font color="#0000ff">INSERT INTO OPENQUERY</font>(Allies, <font color="#ff0000">'SELECT ... FROM OracleTalbe WHERE 1=2'</font>) <font color="#0000ff">VALUES</font> ( ... )</div>
		<div>    <font color="#990099">删除Linked Server</font></div>
		<div>    <font color="#767676">sp_dropserver</font><font color="#ff0000">'Allies'</font>, <font color="#ff0000">'droplogins'</font></div>
		<div>
				<font color="#ff0000">
				</font> </div>
		<div>
				<font color="#000066">    注意：使用OPENROWSET、OPENQUERY时，SQL Server不对提交的SQL语句做任何检查，直接将语句提交给Linked Server进行处理；使用四部分命名法时，SQL Server可能从Linked Server上读取被引用表的数据到SQL Server，然后在SQL Server上来完成其它操作。</font>
		</div>
		<div>
				<font color="#000066">
				</font> </div>
		<div>
				<font color="#990099">    设置SQL Server到Oracle的Linked Server，可参考以下KB文章：</font>
		</div>
		<div>    <a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;280106" target="_blank"><font color="blue">How to set up and troubleshoot a linked server to Oracle in SQL Server</font></a></div>
		<div>    <a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;244661" target="_blank"><font color="blue">Limitations of Microsoft Oracle ODBC Driver and OLEDB Provider</font></a></div>
		<div>    <a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;259959" target="_blank"><font color="blue">Techniques to Debug Connectivity Issues to an Oracle Server Using the ODBC Driver and OLE DB Provider</font></a></div>
		<div>    <a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;239719" target="_blank"><font color="blue">Supportability of the Microsoft ODBC Driver/ OLE DB Provider for Oracle w.r.t Oracle 8.x</font></a></div>
		<div> </div>
		<div>    <strong><font color="#cc3333">分布式事务中的OPENROWSET、OPENQUERY、OPENDATASOURCE</font></strong></div>
		<div>
				<font color="#990099">    如果在事务，或是一些隐含使用事务的情况下，例如TRIGGER中，使用OPENROWSET、OPENQUERY、OPENDATASOURCE时，就需要使用分布式事务来处理。</font>
		</div>
		<div>
				<font color="#990099">    在分布式事务中使用OPENROWSET、OPENQUERY、OPENDATASOURCE或Linked Server时，需要注意：</font>
		</div>
		<div>
				<font color="#990099">    1. 必须启动MSDTC服务。</font>
		</div>
		<div>
				<font color="#990099">    Service Name为Distributed Transaction Coodinator。</font>
		</div>
		<div>
				<font color="#990099">    2. 所涉及的Server之间如果存在网关、防火墙，需要开启TCP 135端口。</font>
		</div>
		<div>
				<font color="#990099">    分布式事务需要使用这个端口通讯。</font>
		</div>
		<div>
				<font color="#990099">    3. 如果Server之间跨网段，则Server之间需要能互相PING到机器名（而不是IP地址）。</font>
		</div>
		<div>
				<font color="#990099">    如果相互PING机器名有问题，修改<font color="#990099">system32/driver/etc</font>目录下的hosts文件。</font>
		</div>
		<div>
				<font color="#990099">
				</font> </div>
		<div>
				<font color="#990099">    上面的设置不正确时，会出现类似如下的错误：</font>
		</div>
		<div>
				<font color="#767676">    该操作未能执行，因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。<br />[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]<br />OLE DB 错误跟踪［OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a］。</font>
				<font color="#990099"> </font>
		</div>
		<div>
				<font color="#990099">
				</font> </div>
		<div>
				<font color="#990099">    分布式事务可以查询下列KB文章：</font>
		</div>
		<div>    <a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;191168" target="_blank"><font color="blue">Failed to Enlist on Calling Object's Transaction</font></a></div>
		<div>    <a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;306843" target="_blank"><font color="blue">How to troubleshoot MS DTC firewall issues</font></a></div>
		<div>    <a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;329332" target="_blank"><font color="blue">You receive error 7391 when you run a distributed transaction against a linked server</font></a></div>
		<div> </div>
		<div>    <font color="#990099">使用分布式查询，可以参考：<a href="http://www.microsoft.com/technet/prodtechnol/sql/70/reskit/part12/sqc24.mspx" target="_blank"><font color="blue">Chapter 25 - Distributed Queries: OLE DB Connectivity</font></a>。</font></div>
		<div>    <font color="#990099">关于ORAOLEDB提供程序的详细说明，可以参考：</font><a href="http://www.cs.utah.edu/classes/cs5530-gary/oracle/doc/B10501_01/win.920/a95498/index.htm" target="_blank"><font color="blue">Oracle Provider for OLE DB Developer's Guide - Release 9.2 </font></a><font color="#990099">。</font></div>
<img src ="http://www.blogjava.net/Ben/aggbug/38085.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Ben/" target="_blank">Ben</a> 2006-03-29 16:35 <a href="http://www.blogjava.net/Ben/archive/2006/03/29/38085.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>