<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>SqlServer on 冯威的博客</title><link>https://fwhyy.com/tags/sqlserver/</link><description>Recent content in SqlServer on 冯威的博客</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Sat, 07 Sep 2013 00:00:00 +0800</lastBuildDate><atom:link href="https://fwhyy.com/tags/sqlserver/atom.xml" rel="self" type="application/rss+xml"/><item><title>SqlServer2008R2用Windows身份登录18456错误解决</title><link>https://fwhyy.com/2013/09/sqlserver2008r2-windows-login-18456-error/</link><pubDate>Sat, 07 Sep 2013 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2013/09/sqlserver2008r2-windows-login-18456-error/</guid><description>&lt;p&gt;重装系统后发现SqlServer2008R2使用Windows身份验证不能进行连接，如下图：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201302000357.webp" alt="07070635-ce750450dc434a518651c5d3b77f9402" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;以前经常会碰到SqlServer 身份验证连接失败，Windows身份验证的连接失败还是第一次，试了下SqlServer 身份验证可以正常连接，sa账号连接进去后，在安全性-》登录名下没有发现当前登录用户的账号，在登录名上点击邮件，新建登录名即可：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201302000426.webp" alt="07070636-ed428dd377a147e99a2e428551933309" loading="lazy" decoding="async"&gt;
&lt;/p&gt;</description></item><item><title>SQL查询-将列转换成字符串（for xml path）</title><link>https://fwhyy.com/2013/03/sql-query-for-xml-path/</link><pubDate>Tue, 19 Mar 2013 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2013/03/sql-query-for-xml-path/</guid><description>&lt;h2 id="背景"&gt;背景&lt;/h2&gt;
&lt;p&gt;最近做一报表，因为查询的SQL很长很复杂，导致直接查询出现异常，后来想到将大量重复的只是查询条件不同的子查询放到函数中去做，无奈需要的参数不能传进函数中，因为参数格式类似如：&amp;lsquo;ProjGUID1&amp;rsquo;,&amp;lsquo;ProjGUID2&amp;rsquo; 这样，这是报表工具生成的，无法修改。现在就要想办法让参数能传进函数中或是换用其他的方式。&lt;/p&gt;
&lt;h2 id="思路"&gt;思路&lt;/h2&gt;
&lt;p&gt;1、首先想到的是用存储过程，但是在报表工具中调试不通，存储过程不能得到有效的执行，可能是根本就不支持存储过程；&lt;/p&gt;
&lt;p&gt;2、将参数作为in的条件，查询出符合条件的GUID，返回的是一个表，然后循环表的行记录，拼接GUID传入函数，但是报表工具中的SQL不支持定义变量和临时表，此方法也行不通；&lt;/p&gt;
&lt;p&gt;3、利用SQL语句的For Xml 将GUID查询成一个XML结构的字符串，但传入函数中后解析该XML需要用到系统存储过程sp_xml_preparedocument ，函数中并不支持调用存储过程，此路也不通。关于SQL中解析XML可以参见我之前的博文《&lt;a href="http://blog.fwhyy.com/2011/07/use-sp_xml_preparedocument-processing-xml-documents/"&gt;使用sp_xml_preparedocument处理XML文档&lt;/a&gt;》。&lt;/p&gt;
&lt;h2 id="解决方法"&gt;解决方法&lt;/h2&gt;
&lt;p&gt;上面说到了SQL的For Xml可以将查询的列转换成XML结构的字符串，还有一种方法可以将查询的字段转换成以特定符号隔开的字符串，那就是For Xml Path：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;SELECT TOP 2 CONVERT(VARCHAR(40),ProjGUID)+&amp;#39;,&amp;#39; FROM p_Project FOR XML PATH(&amp;#39;&amp;#39;)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;上面的语句得到的结果如下：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;BAA95B67-FC41-4A78-AF1C-014BBE0AC368,37641496-23AA-46CB-9817-027AA120F5C6,
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;至此问题解决，这样的字符串是可以传进函数的，只需将最后的逗号去掉即可。&lt;/p&gt;</description></item><item><title>在SQL查询中使用LIKE来代替IN</title><link>https://fwhyy.com/2011/08/in-the-sql-query-using-the-like-instead-of-the-in/</link><pubDate>Sat, 13 Aug 2011 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2011/08/in-the-sql-query-using-the-like-instead-of-the-in/</guid><description>&lt;p&gt;在SQL查询中根据已知ID的集合来查询结果我们通常会用到IN，直接在IN后面给出ID的集合或是在IN后面跟一个子查询。如下：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;SELECT * FROM Orders
WHERE OrderGUID IN(&amp;#39;BC71D821-9E25-47DA-BF5E-009822A3FC1D&amp;#39;,&amp;#39;F2212304-51D4-42C9-AD35-5586A822258E&amp;#39;)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;可以看出直接在IN后面跟ID的集合需要将每一个ID都用单引号引起来。在实际应用中会遇到这么一种情况，在界面中收集的是一串GUID的拼接字符串，中间以逗号隔开，如果作为参数传到一个存储过程中执行，最终生成的语句会是下面这样：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;SELECT * FROM Orders
WHERE OrderGUID IN(&amp;#39;BC71D821-9E25-47DA-BF5E-009822A3FC1D,F2212304-51D4-42C9-AD35-5586A822258E&amp;#39;)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这样就不能查询到正确的结果。&lt;/p&gt;
&lt;p&gt;一般情况下我们解决此问题的思路是将传入的字符串用一个split函数来处理，最终处理的结果是一张表，然后将这个表做自查询即可，如下：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;DECLARE @IDs VARCHAR(4000)
SET @IDs=&amp;#39;BC71D821-9E25-47DA-BF5E-009822A3FC1D,F2212304-51D4-42C9-AD35-5586A822258E&amp;#39;
DECLARE @temp TABLE(str VARCHAR(50))
INSERT INTO @temp
SELECT * FROM dbo.Split(@IDs,&amp;#39;,&amp;#39;)
SELECT * FROM Orders WHERE OrderGUID IN (SELECT str FROM @temp)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;当然split函数系统比不提供，需要我们自己写：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;CREATE FUNCTION Split
(
 @SourceSql varchar(8000),
 @StrSeprate varchar(10)
)
RETURNS @temp TABLE(F1 VARCHAR(100))
AS
BEGIN
 DECLARE @i INT
 SET @SourceSql=rtrim(ltrim(@SourceSql))
 SET @i=charindex(@StrSeprate,@SourceSql)
 WHILE @i&amp;gt;=1
 BEGIN
 INSERT @temp VALUES(left(@SourceSql,@i-1))
 SET @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
 SET @i=charindex(@StrSeprate,@SourceSql)
 END
 IF @SourceSql&amp;lt;&amp;gt;&amp;#39;&amp;#39;
 INSERT @temp VALUES(@SourceSql)
 RETURN
END
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;像这样做非常麻烦，而且还需要借助函数来实现，下面介绍一种简单的方法，因为GUID是唯一的，所以在上面的例子中可以使用LIKE来代替IN也可以达到同样的查询效果：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;SELECT * FROM Orders
WHERE &amp;#39;BC71D821-9E25-47DA-BF5E-009822A3FC1D,F2212304-51D4-42C9-AD35-5586A822258E&amp;#39;
LIKE &amp;#39;%&amp;#39;+convert(VARCHAR(40),OrderGUID)+&amp;#39;%&amp;#39;
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>SqlServer表死锁的解决方法</title><link>https://fwhyy.com/2011/08/essentially-a-table-of-deadlock-solution/</link><pubDate>Sat, 06 Aug 2011 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2011/08/essentially-a-table-of-deadlock-solution/</guid><description>&lt;p&gt;前些天写一个存储过程，存储过程中使用了事务，后来我把一些代码注释掉来进行调试找错，突然发现一张表被锁住了，原来是创建事务的代码忘记注释掉。本文表锁住了的解决方法。&lt;/p&gt;
&lt;p&gt;其实不光是上面描述的情况会锁住表，还有很多种场景会使表放生死锁，解锁其实很简单，下面用一个示例来讲解：&lt;/p&gt;
&lt;p&gt;1 首先创建一个测试用的表：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;CREATE TABLE Test
(
 TID INT IDENTITY(1,1)
)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;2 执行下面的SQL语句将此表锁住：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;SELECT * FROM Test WITH (TABLOCKX)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;3 通过下面的语句可以查看当前库中有哪些表是发生死锁的：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;SELECT request_session_id spid,OBJECT_NAME(resource_associated_entity_id)tableName
FROM sys.dm_tran_locks
WHERE resource_type=&amp;#39;OBJECT &amp;#39; 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;4 上面语句执行结果如下：&lt;/p&gt;
&lt;p&gt;spid ：被锁进程ID。
tableName：发生死锁的表名。
5 只需要使用kill关键字来杀掉被锁的进程ID就可以对表进行解锁：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;KILL 52
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>使用sp_xml_preparedocument处理XML文档</title><link>https://fwhyy.com/2011/07/use-sp-xml-preparedocument-processing-xml-documents/</link><pubDate>Sat, 23 Jul 2011 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2011/07/use-sp-xml-preparedocument-processing-xml-documents/</guid><description>&lt;p&gt;有时会在存储过程中处理一些XML格式的数据，所以会用到sp_xml_preparedocument，他可以将XML数据进行读取，然后使用 MSXML 分析器 (Msxmlsql.dll) 对其进行分析。我们就可以很容易的在存储过程中得到XML中我们想要的数据。下面的代码就是使用sp_xml_preparedocument读取XML：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;DECLARE @hdoc int
DECLARE @doc varchar(1000)
SET @doc =&amp;#39;
&amp;lt;ROOT&amp;gt;
&amp;lt;Customer CustomerID=&amp;#34;VINET&amp;#34; ContactName=&amp;#34;Paul Henriot&amp;#34;&amp;gt;
 &amp;lt;Order CustomerID=&amp;#34;VINET&amp;#34; EmployeeID=&amp;#34;5&amp;#34; OrderDate=&amp;#34;1996-07-04T00:00:00&amp;#34;&amp;gt;
 &amp;lt;OrderDetail OrderID=&amp;#34;10248&amp;#34; ProductID=&amp;#34;11&amp;#34; Quantity=&amp;#34;12&amp;#34;/&amp;gt;
 &amp;lt;OrderDetail OrderID=&amp;#34;10248&amp;#34; ProductID=&amp;#34;42&amp;#34; Quantity=&amp;#34;10&amp;#34;/&amp;gt;
 &amp;lt;/Order&amp;gt;
&amp;lt;/Customer&amp;gt;
&amp;lt;Customer CustomerID=&amp;#34;LILAS&amp;#34; ContactName=&amp;#34;Carlos Gonzlez&amp;#34;&amp;gt;
 &amp;lt;Order CustomerID=&amp;#34;LILAS&amp;#34; EmployeeID=&amp;#34;3&amp;#34; OrderDate=&amp;#34;1996-08-16T00:00:00&amp;#34;&amp;gt;
 &amp;lt;OrderDetail OrderID=&amp;#34;10283&amp;#34; ProductID=&amp;#34;72&amp;#34; Quantity=&amp;#34;3&amp;#34;/&amp;gt;
 &amp;lt;/Order&amp;gt;
&amp;lt;/Customer&amp;gt;
&amp;lt;/ROOT&amp;gt;&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;EXEC sp_xml_preparedocument @hdoc OUTPUT, @doc
上面只是读取了XML，要想获取XML数据还需要使用OPENXML，代码如下：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;SELECT *
FROM openxml(@hdoc,&amp;#39;/ROOT/Customer&amp;#39;,1)
WITH (CustomerID VARCHAR(40),ContactName VARCHAR(40)) 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;OPENXML有三个参数：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;第一个是sp_xml_preparedocument读取是的OUTPUT参数，在本示例中就是@hdoc；&lt;/li&gt;
&lt;li&gt;第二个是一个XPath表达式，用来获取指定位置的数据；&lt;/li&gt;
&lt;li&gt;第三个是一个可选项，用来表示获取的方式，有0,1,2,8四种取值，详细解释&lt;a href="http://msdn.microsoft.com/zh-cn/library/ms186918.aspx"&gt;请看&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;FROM后面的WITH也是可选的，用来指定获取哪些数据字段，上面代码中只取了CustomerID和ContactName。上面的查询结果如下：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;CustomerID&lt;/th&gt;
					&lt;th&gt;ContactName&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;LILAS&lt;/td&gt;
					&lt;td&gt;Carlos Gonzlez&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;如果不指定WITH子句，查询出来的是一个默认的表结构，如下：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2011/2011-07-23_114701.webp" alt="2011-07-23_114701" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;表格列的解释说明：&lt;/p&gt;
&lt;p&gt;在WITH子句中,我们还可以通过设置来获取父级元素的属性值:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;DECLARE @hdoc int
DECLARE @doc varchar(1000)
SET @doc =&amp;#39;
&amp;lt;ROOT&amp;gt;
&amp;lt;Customer CustomerID=&amp;#34;VINET&amp;#34; ContactName=&amp;#34;Paul Henriot&amp;#34;&amp;gt;
 &amp;lt;Order OrderID=&amp;#34;10248&amp;#34; CustomerID=&amp;#34;VINET&amp;#34; EmployeeID=&amp;#34;5&amp;#34;
 OrderDate=&amp;#34;1996-07-04T00:00:00&amp;#34;&amp;gt;
 &amp;lt;OrderDetail ProductID=&amp;#34;11&amp;#34; Quantity=&amp;#34;12&amp;#34;/&amp;gt;
 &amp;lt;OrderDetail ProductID=&amp;#34;42&amp;#34; Quantity=&amp;#34;10&amp;#34;/&amp;gt;
 &amp;lt;/Order&amp;gt;
&amp;lt;/Customer&amp;gt;
&amp;lt;Customer CustomerID=&amp;#34;LILAS&amp;#34; ContactName=&amp;#34;Carlos Gonzlez&amp;#34;&amp;gt;
 &amp;lt;Order OrderID=&amp;#34;10283&amp;#34; CustomerID=&amp;#34;LILAS&amp;#34; EmployeeID=&amp;#34;3&amp;#34;
 OrderDate=&amp;#34;1996-08-16T00:00:00&amp;#34;&amp;gt;
 &amp;lt;OrderDetail ProductID=&amp;#34;72&amp;#34; Quantity=&amp;#34;3&amp;#34;/&amp;gt;
 &amp;lt;/Order&amp;gt;
&amp;lt;/Customer&amp;gt;
&amp;lt;/ROOT&amp;gt;&amp;#39;

EXEC sp_xml_preparedocument @hdoc OUTPUT, @doc
SELECT *
FROM OPENXML (@hdoc, &amp;#39;/ROOT/Customer/Order/OrderDetail&amp;#39;,2)
 WITH (OrderID int &amp;#39;../@OrderID&amp;#39;,
 CustomerID varchar(10) &amp;#39;../@CustomerID&amp;#39;,
 OrderDate datetime &amp;#39;../@OrderDate&amp;#39;,
 ProdID int &amp;#39;@ProductID&amp;#39;,
 Qty int &amp;#39;@Quantity&amp;#39;)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;查询的结果为:&lt;/p&gt;</description></item><item><title>附加数据库失败 操作系统错误5</title><link>https://fwhyy.com/2011/05/additional-database-failure-5120-error/</link><pubDate>Sun, 22 May 2011 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2011/05/additional-database-failure-5120-error/</guid><description>&lt;h2 id="环境"&gt;环境&lt;/h2&gt;
&lt;p&gt;数据库版本：SqlServer2008 R2 32位&lt;/p&gt;
&lt;p&gt;附加文件的版本：SqlServer2008 R2 64位&lt;/p&gt;</description></item><item><title>SQL2008修改并保存表结构时报错的解决(阻止保存要求重新创建表的更改)</title><link>https://fwhyy.com/2011/03/sql2008-modify-and-save-the-table-structure-error/</link><pubDate>Wed, 09 Mar 2011 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2011/03/sql2008-modify-and-save-the-table-structure-error/</guid><description>&lt;p&gt;今天在SqlServer2008中修改表结构时，弹出下面对话框阻止我保存&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201301954622.webp" alt="20100304002" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;解决此问题方法为：&lt;/p&gt;
&lt;p&gt;1 打开SqlServer2008工具—&amp;gt;选项&lt;/p&gt;
&lt;p&gt;2 在弹出的对话框中去掉“阻止保存要求重新创建表的更改”，如下图&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201301954844.webp" alt="2011-03-09_161021" loading="lazy" decoding="async"&gt;
&lt;/p&gt;</description></item><item><title>解决“此版本的 SQL Server 不支持用户实例登录标志。该连接将关闭”问题</title><link>https://fwhyy.com/2011/02/sql-server-does-not-support-the-user-instance-login-flag/</link><pubDate>Tue, 22 Feb 2011 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2011/02/sql-server-does-not-support-the-user-instance-login-flag/</guid><description>&lt;p&gt;错误提示&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201301954824.webp" alt="20110222-001" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;出现此错误的原因为在webconfig连接字符串中的;User Instance设置为True了，将;User Instance值修改为false即可解决此问题。&lt;/p&gt;</description></item><item><title>SharePoint2007安装图文详解三：安装SqlServer2005</title><link>https://fwhyy.com/2011/01/install-sqlserver2005/</link><pubDate>Tue, 11 Jan 2011 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2011/01/install-sqlserver2005/</guid><description>&lt;p&gt;SharePoint2007 中的很多功能会用到数据库，如分析服务，报表服务等。本文介绍SqlServer2005的安装，数据库的安装很简单，基本上安装默认选项点击下一步即可，需要注意的地方在下面会提到。&lt;/p&gt;
&lt;p&gt;现在就开始安装SqlServer2005 ，运行Setup.exe&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300707160.webp" alt="2011-01-10_100800" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;选中“我接受许可条款和条件”，点击“下一步”&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300707706.webp" alt="2011-01-10_113025" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;点击“安装”&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300707388.webp" alt="2011-01-10_113725" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;点击“下一步”&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300707407.webp" alt="2011-01-10_113911" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;点击“下一步”&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300707915.webp" alt="2011-01-10_113957" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;点击“下一步”&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300707990.webp" alt="2011-01-10_114354" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;点击“下一步”&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300707920.webp" alt="2011-01-10_114427" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;点击“高级”&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300708207.webp" alt="2011-01-10_120035" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;根据需要选择需要安装的服务，此处我将所有的都选择了，点击“下一步”&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300708185.webp" alt="2011-01-10_120318" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;选择“默认实例”，点击“下一步”&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300708141.webp" alt="2011-01-10_144340" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;选择“使用域用户账户”，输入用户名和密码，域填写在安装AD时配置的域名称。填写完后点击“下一步”&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300708895.webp" alt="201101111515433034" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;选择“Windows身份验证模式”，点击“下一步”&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300708213.webp" alt="2011-01-10_145622" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;按照默认，点击“下一步”&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300708228.webp" alt="2011-01-10_145752" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;选择“安装默认配置”，点击“下一步”&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300708174.webp" alt="2011-01-10_145938" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;点击“下一步”&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300709983.webp" alt="2011-01-10_150028" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;点击“安装”&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300709405.webp" alt="2011-01-10_150143" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;现在等他自己安装就行了，我们可以去做做别的事情。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300709198.webp" alt="2011-01-10_153124" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;到现在SqlServer2005已经安装成功了。&lt;/p&gt;
&lt;h2 id="相关文章"&gt;相关文章&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://blog.fwhyy.com/2011/01/iis-install/"&gt;SharePoint2007安装图文详解一：安装IIS及相关组件&lt;/a&gt;
&lt;a href="http://blog.fwhyy.com/2011/01/installation-of-ad-and-dns/"&gt;SharePoint2007安装图文详解二：安装AD（活动目录）及DNS&lt;/a&gt;
SharePoint2007安装图文详解三：安装SqlServer2005
&lt;a href="http://blog.fwhyy.com/2011/01/installation-of-the-net-framework-3-0-and-sharepoint-2007/"&gt;SharePoint2007安装图文详解四：安装.NET Framework 3.0和SharePoint 2007&lt;/a&gt;&lt;/p&gt;</description></item><item><title>SQL实现分组统计查询（按月、小时分组）</title><link>https://fwhyy.com/2009/06/sql-implementation-group-statistical-query/</link><pubDate>Thu, 04 Jun 2009 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2009/06/sql-implementation-group-statistical-query/</guid><description>&lt;h2 id="首先创建数据表"&gt;首先创建数据表&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Create table Counter
(
 CounterID int identity(1,1) not null,
 IP varchar(20),
 AccessDateTime datetime,
 AccessCount int
)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;该表在这儿只是演示使用，所以只提供了最基本的字段:IP地址，访问时间和访问次数。如果每访问一次就插入一条记录，那么AccessCount可以不要，查询时使用count就可以了，这样当访问量很大的时候会对数据库造成很大压力。设置AccessCount字段可以根据需求在特定的时间范围内如果是相同IP访问就在AccessCount上累加。&lt;/p&gt;
&lt;p&gt;现在往表中插入几条记录&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;insert into Counter
select &amp;#39;127.0.0.1&amp;#39;,getdate(),1 union all
select &amp;#39;127.0.0.2&amp;#39;,getdate(),1 union all
select &amp;#39;127.0.0.3&amp;#39;,getdate(),1
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="根据年来查询以月为时间单位"&gt;根据年来查询，以月为时间单位&lt;/h2&gt;
&lt;p&gt;通常情况下一个简单的分组就能搞定&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;select
 convert(varchar(7),AccessDateTime,120) as Date,
 sum(AccessCount) as [Count]
from
 Counter
group by
 convert(varchar(7),AccessDateTime,120)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;像这样分组后没有记录的月份不会显示，如下：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201301950583.webp" alt="2010-12-30_103754" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;这当然不是我们想要的，所以得换一种思路来实现，如下：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;declare @Year int
set @Year=2009
select
 m as [Date],
 sum(
 case when datepart(month,AccessDateTime)=m
 then AccessCount else 0 end
 ) as [Count]
from
 Counter c,
 (
 select 1 m
 union all select 2
 union all select 3
 union all select 4
 union all select 5
 union all select 6
 union all select 7
 union all select 8
 union all select 9
 union all select 10
 union all select 11
 union all select 12
 ) aa
where
 @Year=year(AccessDateTime)
group by
 m
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;查询结果如下：&lt;/p&gt;</description></item><item><title>Sqlserver2005附加数据库为只读的解决方法</title><link>https://fwhyy.com/2009/05/sqlserver2005-additional-database-for-read-only-solutions/</link><pubDate>Fri, 08 May 2009 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2009/05/sqlserver2005-additional-database-for-read-only-solutions/</guid><description>&lt;h2 id="症状"&gt;症状：&lt;/h2&gt;
&lt;p&gt;在sqlserver2005中附加数据库时，附加的数据库会变成只读的，只能进行查询操作。&lt;/p&gt;</description></item><item><title>解決“无法解决 equal to 操作的排序规则冲突 ”问题</title><link>https://fwhyy.com/2008/07/to-solve-the-unable-to-solve-the-equal-to-operation-collation-conflict-problem/</link><pubDate>Thu, 03 Jul 2008 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2008/07/to-solve-the-unable-to-solve-the-equal-to-operation-collation-conflict-problem/</guid><description>&lt;h2 id="问题"&gt;问题：&lt;/h2&gt;
&lt;p&gt;在创建存储过程时 出现 “无法解决 equal to 操作的排序规则冲突 ”&lt;/p&gt;
&lt;h2 id="解决方法"&gt;解决方法：&lt;/h2&gt;
&lt;p&gt;1 WHERE 列名 collate Chinese_PRC_CI_AS(强制指定排序规则)，如：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;select
 *
from
 test
where
 name collate chinese_prc_ci_as in
 (select name1 chinese_prc_ci_as from test1)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;2 如果涉及到多表查询，则在on后面加上collate Chinese_PRC_CI_AS(强制指定排序规则) 如：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;select
 *
from
 test1 1
join
 test2 2
on
 1.id=2.id collate Chinese_PRC_CI_AS
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>解决sqlserver2005数据库sa登录问题</title><link>https://fwhyy.com/2007/12/solve-the-problem-of-sqlserver2005-database-sa-login/</link><pubDate>Sun, 02 Dec 2007 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2007/12/solve-the-problem-of-sqlserver2005-database-sa-login/</guid><description>&lt;p&gt;如果安装sql server 2005的时候，设置的身份验证模式为”windows”(默认), 安装完成后, 再设置为”sql server和windows”的身份验证模式, 则sa用户是被禁用的。必须启用它。&lt;/p&gt;</description></item><item><title>存储过程生成流水号</title><link>https://fwhyy.com/2007/10/stored-procedure-to-generate-a-serial-number/</link><pubDate>Wed, 31 Oct 2007 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2007/10/stored-procedure-to-generate-a-serial-number/</guid><description>&lt;h2 id="首先在数据库中创建一个存放流水号的表"&gt;首先在数据库中创建一个存放流水号的表&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;CREATE TABLE [dbo].[NumSeq] (
 [Cate] [varchar] (2) NOT NULL ,
 [DateNo] [varchar] (4) NOT NULL ,
 [Seq] [int] NULL ,
 [CrTime] [datetime] NOT NULL
)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;上面的代码中，Cate 字段为流水号的头，可以在下面的存储过程中用参数的方式传入，我的定义是2个字符，这个可以根据具体需要更改&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DateNo 字段为获取日期信息&lt;/li&gt;
&lt;li&gt;Seq 字段为流水号，但最终生成的流水号是这三个字段的相加&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="创建存储过程"&gt;创建存储过程&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;CREATE PROC dpPMT_SGetMaintainSeq
@MaintainCate VARCHAR(2)

AS
--***********************累加编号*************************************************
DECLARE @MaintainNo VARCHAR(12)
IF NOT EXISTS(SELECT
 *
 FROM
 NumSeq
 WHERE
 Cate=@MaintainCate AND DATEDIFF(DAY,CrTime,GETDATE())=0)
 BEGIN
 INSERT INTO
 NumSeq(Cate,DateNo,Seq)
 values(@MaintainCate,RIGHT(CONVERT(VARCHAR(4),YEAR(GETDATE())),2)+
 REPLICATE(&amp;#39;0&amp;#39;,2-LEN(MONTH(GETDATE())))+CONVERT(VARCHAR(2),MONTH(GETDATE())),0)

 END
ELSE
 BEGIN
 UPDATE
 NumSeq
 SET
 Seq=Seq+1
 WHERE
 Cate=@MaintainCate AND DateNo=RIGHT(CONVERT(VARCHAR(4),YEAR(GETDATE())),2)+
 REPLICATE(&amp;#39;0&amp;#39;,2-LEN(MONTH(GETDATE())))+CONVERT(VARCHAR(2),MONTH(GETDATE()))
 END

--************************组合编号***************************************************************
SELECT
 @MaintainNo=Cate+DateNo+REPLICATE(&amp;#39;0&amp;#39;,6-LEN(Seq))+CONVERT(VARCHAR(6),Seq)
FROM
 NumSeq
WHERE
 Cate=@MaintainCate AND DateNo=RIGHT(CONVERT(VARCHAR(4),YEAR(GETDATE())),2)+
 REPLICATE(&amp;#39;0&amp;#39;,2-LEN(MONTH(GETDATE())))+CONVERT(VARCHAR(2),MONTH(GETDATE()))

SELECT @MaintainNo
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这个存储过程最终输出的结果如：AA071031000001 前面两位是传入的参数，中间四位是年份的后两位和月，最后的六位为6位数字的流水号。您也可以修改上面的存储过程来生成符合您要求的流水号&lt;/p&gt;</description></item></channel></rss>