<?xml version="1.0" encoding="UTF-8" ?> <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>Route-n</title><link>http://blogs.wankuma.com/route/</link><description>@wankuma</description><managingEditor>Route（佐久間　竜也）</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>Route（佐久間　竜也）</dc:creator><title>[T-SQL]１から１０まで足す</title><link>http://blogs.wankuma.com/route/archive/2009/10/06/181903.aspx</link><pubDate>Tue, 06 Oct 2009 03:12:00 GMT</pubDate><guid>http://blogs.wankuma.com/route/archive/2009/10/06/181903.aspx</guid><wfw:comment>http://blogs.wankuma.com/route/comments/181903.aspx</wfw:comment><comments>http://blogs.wankuma.com/route/archive/2009/10/06/181903.aspx#Feedback</comments><slash:comments>228</slash:comments><wfw:commentRss>http://blogs.wankuma.com/route/comments/commentRss/181903.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/route/services/trackbacks/181903.aspx</trackback:ping><description>&lt;DIV class=body_01&gt;
&lt;DIV class=normal_div&gt;ご無沙汰しております。&lt;BR&gt;
そろそろ出尽くしたかな？と思われる「1から10までの総和をループを使わずに書く」ですが、&lt;BR&gt;
せっかくなのでT-SQLでカーソルを使わずに表現してみました。&lt;BR&gt;
&lt;BR&gt;
基本的に既出の計算方法だけれど、こういう時になんとなくいつも蚊帳の外に追いやられてる気がする
&lt;div class=head_02 style="padding-top:10px;padding-bottom:10px;"&gt;＞SQLもたまにはまぜて～&lt;/DIV&gt;
ということで。
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;PRE class=SQL name="code"&gt;
--まずはデータ準備
DECLARE @DATA TABLE(value int)
INSERT INTO @DATA(value) VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10)

--列挙w
SELECT
	l1.value + l2.value + l3.value + l4.value + l5.value 
	+ l6.value + l7.value + l8.value + l9.value + l10.value
FROM @DATA l1 
INNER JOIN @DATA l2  ON l1.value =  l2.value - 1
INNER JOIN @DATA l3  ON l2.value =  l3.value - 1 
INNER JOIN @DATA l4  ON l3.value =  l4.value - 1
INNER JOIN @DATA l5  ON l4.value =  l5.value - 1
INNER JOIN @DATA l6  ON l5.value =  l6.value - 1
INNER JOIN @DATA l7  ON l6.value =  l7.value - 1
INNER JOIN @DATA l8  ON l7.value =  l8.value - 1
INNER JOIN @DATA l9  ON l8.value =  l9.value - 1
INNER JOIN @DATA l10 ON l9.value = l10.value - 1;

--再帰クエリ
WITH Calc(value, sumValue) AS
(
  SELECT value, value FROM @DATA WHERE value = (SELECT MIN(value) FROM @DATA)
  UNION ALL
  SELECT L.value, C.sumValue + L.value
  FROM @DATA L JOIN Calc C ON L.value - 1 = C.value  
)
SELECT sumValue FROM Calc WHERE value = (SELECT MAX(value) FROM @DATA)
--SELECT MAX(sumValue) FROM Calc でもOK

--最後は素直に
SELECT (MAX(value) + MIN(value)) * COUNT(value) / 2 FROM @DATA
&lt;/pre&gt;

&lt;DIV class=body_02&gt;
いじょ～
&lt;/DIV&gt;&lt;img src ="http://blogs.wankuma.com/route/aggbug/181903.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Route（佐久間　竜也）</dc:creator><title>[SQL  Server]照合順序と識別子</title><link>http://blogs.wankuma.com/route/archive/2008/09/18/156870.aspx</link><pubDate>Thu, 18 Sep 2008 08:12:00 GMT</pubDate><guid>http://blogs.wankuma.com/route/archive/2008/09/18/156870.aspx</guid><wfw:comment>http://blogs.wankuma.com/route/comments/156870.aspx</wfw:comment><comments>http://blogs.wankuma.com/route/archive/2008/09/18/156870.aspx#Feedback</comments><slash:comments>935</slash:comments><wfw:commentRss>http://blogs.wankuma.com/route/comments/commentRss/156870.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/route/services/trackbacks/156870.aspx</trackback:ping><description>&lt;DIV class=body_01&gt;
	&lt;DIV class=normal_div&gt;来週には遅い夏休みを取れる状況になったので更新☆&lt;BR&gt;
	もう２ヶ月も経ってしまいましたが、７月のLTで触れた照合順序と識別子について文字にします～（今更？）
	&lt;/DIV&gt;
	&lt;table&gt;
	 &lt;tr&gt;
	  &lt;td style="padding-top:7px;vertical-align:top;"&gt;&lt;DIV class=head_01&gt;今回の環境&lt;/DIV&gt;
		&lt;UL class=LinkUL&gt;
		  &lt;LI&gt;Windows Vista Ultimate 32bit&lt;/LI&gt;
		  &lt;LI&gt;SQL Server 2008 Developer Edition&lt;/LI&gt;
		&lt;/UL&gt;&lt;BR&gt;
		※今回は右記の４つのインスタンスを１つのサーバーグループに登録し、&lt;BR&gt;
		　それぞれのmasterデータベースに対してクエリを実行しています。
      &lt;/td&gt;
      &lt;td style="padding-top:0px;padding-left:15px;"&gt;
		&lt;DIV class=TableDiv&gt;
			&lt;TABLE class=ListTable_01 cellSpacing=0&gt;
			 &lt;thead&gt;
				 &lt;tr&gt;
				  &lt;th&gt;インスタンス名&lt;/th&gt;&lt;th&gt;照合順序&lt;/th&gt;
				 &lt;/tr&gt;
			 &lt;/thead&gt;
			 &lt;tbody&gt;
				 &lt;tr&gt;
				  &lt;td&gt;SQL2008CIAI&lt;/td&gt;&lt;td&gt;Japanese_CI_AI&lt;/td&gt;
				 &lt;/tr&gt;
				 &lt;tr&gt;
				  &lt;td&gt;SQL2008CIAS&lt;/td&gt;&lt;td&gt;Japanese_CI_AS&lt;/td&gt;
				 &lt;/tr&gt;
				 &lt;tr&gt;
				  &lt;td&gt;SQL2008CSAI&lt;/td&gt;&lt;td&gt;Japanese_CS_AI&lt;/td&gt;
				 &lt;/tr&gt;
				 &lt;tr&gt;
				  &lt;td&gt;SQL2008CSAS&lt;/td&gt;&lt;td&gt;Japanese_CS_AS&lt;/td&gt;
				 &lt;/tr&gt;
			 &lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/DIV&gt;
      &lt;/td&gt;
	 &lt;/tr&gt;
	&lt;/table&gt;
&lt;/DIV&gt;
&lt;DIV class=body_01&gt;
&lt;div class=head_01&gt;照合順序によって結果が変わるクエリ&lt;/div&gt;
&lt;DIV class=body_02&gt;
７月に紹介したクエリとその実行結果は次のような感じでした。&lt;BR&gt;
まずは①と②を見てください。
&lt;/DIV&gt;

&lt;DIV class=QueryTitle&gt;[クエリ①]&lt;/DIV&gt;
&lt;PRE class=SQL name="code"&gt;
DECLARE @つづく NVARCHAR(2) = 'ほげ'
SELECT @づつく AS HOGE
&lt;/pre&gt;

&lt;DIV class=ResultTitle&gt;[結果]&lt;/DIV&gt;
&lt;DIV class=result&gt;
&lt;pre&gt;
VISTA-NOTE\SQL2008CIAS(VISTA-NOTE\Route): メッセージ 137、レベル 15、状態 2、行 2
スカラ変数 "@づつく" を宣言してください。

VISTA-NOTE\SQL2008CSAS(VISTA-NOTE\Route): メッセージ 137、レベル 15、状態 2、行 2
スカラ変数 "@づつく" を宣言してください。

サーバー名               HOGE
------------------------ -----
VISTA-NOTE\SQL2008CIAI   ほげ

VISTA-NOTE\SQL2008CIAI(VISTA-NOTE\Route): (1 行処理されました)

サーバー名               HOGE
------------------------ -----
VISTA-NOTE\SQL2008CSAI   ほげ

VISTA-NOTE\SQL2008CSAI(VISTA-NOTE\Route): (1 行処理されました)
&lt;/pre&gt;
&lt;/DIV&gt;
&lt;BR&gt;
&lt;DIV class=QueryTitle&gt;[クエリ②]&lt;/DIV&gt;
&lt;PRE class=SQL name="code"&gt;
DECLARE @つつつつつつ BIT = 0
SELECT	@つつつつつつ AS A, @づづづづづづ AS B, @つづつづつづ AS C, 
	@っっっっっっ AS D, @つっつっつっ AS E

SET	@っっっっっっ = 1

SELECT	@つつつつつつ AS A, @づづづづづづ AS B, @つづつづつづ AS C, 
	@っっっっっっ AS D, @つっつっつっ AS E
&lt;/pre&gt;
&lt;DIV class=ResultTitle&gt;[結果]&lt;/DIV&gt;
&lt;DIV class=result&gt;
&lt;pre&gt;
VISTA-NOTE\SQL2008CIAS(VISTA-NOTE\Route): メッセージ 137、レベル 15、状態 2、行 2
スカラ変数 "@づづづづづづ" を宣言してください。
VISTA-NOTE\SQL2008CIAS(VISTA-NOTE\Route): メッセージ 137、レベル 15、状態 1、行 5
スカラ変数 "@っっっっっっ" を宣言してください。
VISTA-NOTE\SQL2008CIAS(VISTA-NOTE\Route): メッセージ 137、レベル 15、状態 2、行 7
スカラ変数 "@づづづづづづ" を宣言してください。

VISTA-NOTE\SQL2008CSAS(VISTA-NOTE\Route): メッセージ 137、レベル 15、状態 2、行 2
スカラ変数 "@づづづづづづ" を宣言してください。
VISTA-NOTE\SQL2008CSAS(VISTA-NOTE\Route): メッセージ 137、レベル 15、状態 1、行 5
スカラ変数 "@っっっっっっ" を宣言してください。
VISTA-NOTE\SQL2008CSAS(VISTA-NOTE\Route): メッセージ 137、レベル 15、状態 2、行 7
スカラ変数 "@づづづづづづ" を宣言してください。

サーバー名               A     B     C     D     E
------------------------ ----- ----- ----- ----- -----
VISTA-NOTE\SQL2008CIAI   0     0     0     0     0

VISTA-NOTE\SQL2008CIAI(VISTA-NOTE\Route): (1 行処理されました)

サーバー名               A     B     C     D     E
------------------------ ----- ----- ----- ----- -----
VISTA-NOTE\SQL2008CIAI   1     1     1     1     1

VISTA-NOTE\SQL2008CIAI(VISTA-NOTE\Route): (1 行処理されました)

サーバー名               A     B     C     D     E
------------------------ ----- ----- ----- ----- -----
VISTA-NOTE\SQL2008CSAI   0     0     0     0     0

VISTA-NOTE\SQL2008CSAI(VISTA-NOTE\Route): (1 行処理されました)

サーバー名               A     B     C     D     E
------------------------ ----- ----- ----- ----- -----
VISTA-NOTE\SQL2008CSAI   1     1     1     1     1

VISTA-NOTE\SQL2008CSAI(VISTA-NOTE\Route): (1 行処理されました)
&lt;/pre&gt;
&lt;/DIV&gt;
&lt;DIV class=body_02&gt;
クエリ①もクエリ②も宣言されていない変数が使われているので一見エラーが返ってきそうですが、&lt;BR&gt;
実際に走らせてみるとSQL2008CIAIとSQL2008CSAIで正常に処理されています。&lt;BR&gt;
&lt;BR&gt;
さて、なぜでしょう？&lt;BR&gt;
&lt;BR&gt;
上記では４つのインスタンスのmasterデータベースに対して同じクエリを実行しました。&lt;BR&gt;
異なるのはそれぞれのインスタンスの照合順序です。&lt;BR&gt;
&lt;BR&gt;
照合順序というと一般に並べ替えや文字列比較時に参考にされる条件というイメージですが、&lt;BR&gt;
それに加えてデータベース名やテーブル名・ストアド・変数などの各オブジェクトの名称（識別子）の&lt;BR&gt;
名前付けルールにも影響しています。これが今回の挙動の違いの原因です。
&lt;/DIV&gt;
&lt;BR&gt;
&lt;div class=head_01&gt;識別子の照合順序&lt;/div&gt;
&lt;DIV class=body_02&gt;
識別子の照合順序はその識別子が定義されているレベルによって異なります。&lt;BR&gt;
ログイン名やデータベース名などのインスタンスで定義されているオブジェクトとテーブル変数や一時テーブルなどの&lt;BR&gt;
データベースに依存しないオブジェクトの識別子にはインスタンスの既定の照合順序が適用され、&lt;BR&gt;
テーブル名やビューなどのデータベース内で定義されているオブジェクトの識別子については&lt;BR&gt;
データベースの既定の照合順序が適用されます。&lt;BR&gt;
※あくまで識別子のお話です。特にテーブル変数の中身は違うので要注意～！！　（←これは後日）&lt;BR&gt;
&lt;BR&gt;
クエリ①を再び例に挙げると、
&lt;DIV CLASS=HighLight01&gt;DECLARE @つづく NVARCHAR(2) = 'ほげ'&lt;/DIV&gt;
この部分で「@つづく」という識別子の変数を宣言し、'ほげ'を入れました。&lt;BR&gt;
変数はインスタンスレベルのオブジェクトなので、この識別子にはインスタンスの既定の照合順序が適用されます。&lt;BR&gt;
&lt;BR&gt;
次に
&lt;DIV CLASS=HighLight01&gt;SELECT @づつく AS HOGE&lt;/DIV&gt;
で「@づつく」という識別子を使います。&lt;BR&gt;
ここでの問題は識別子がインスタンスから受け継いだ照合順序において「つ」と「づ」が区別されるかどうかです。&lt;BR&gt;
それではインスタンスと同じ照合順序のmasterデータベースで確認してみましょう。
&lt;/DIV&gt;
&lt;DIV class=QueryTitle&gt;[クエリ③]&lt;/DIV&gt;

&lt;PRE class=SQL name="code"&gt;
SELECT CASE WHEN 'つづ' = 'づつ' THEN '○' ELSE '×' END AS 'つづ = づつ'
     , CASE  WHEN 'つ' = 'づ' THEN '○' ELSE '×' END AS 'つ = づ'
&lt;/pre&gt;

&lt;DIV class=ResultTitle&gt;[結果]&lt;/DIV&gt;

&lt;DIV class=result&gt;
&lt;pre&gt;
サーバー名               つづ = づつ  つ = づ
------------------------ ------------ --------
VISTA-NOTE\SQL2008CIAS   ×           ×

VISTA-NOTE\SQL2008CIAS(VISTA-NOTE\Route): (1 行処理されました)

サーバー名               つづ = づつ  つ = づ
------------------------ ------------ --------
VISTA-NOTE\SQL2008CSAS   ×           ×

VISTA-NOTE\SQL2008CSAS(VISTA-NOTE\Route): (1 行処理されました)

サーバー名               つづ = づつ  つ = づ
------------------------ ------------ --------
VISTA-NOTE\SQL2008CIAI   ○           ○

VISTA-NOTE\SQL2008CIAI(VISTA-NOTE\Route): (1 行処理されました)

サーバー名               つづ = づつ  つ = づ
------------------------ ------------ --------
VISTA-NOTE\SQL2008CSAI   ○           ○

VISTA-NOTE\SQL2008CSAI(VISTA-NOTE\Route): (1 行処理されました)
&lt;/pre&gt;
&lt;/DIV&gt;
&lt;DIV class=body_02&gt;
アクセントを区別するJapanese_CI_ASとJapanese_CS_ASでは「×」になり、&lt;BR&gt;
アクセントを区別しないJapanese_CI_AIとJapanese_CS_AIで「○」になりました。&lt;BR&gt;
この結果の違いは「つ」と「づ」のアクセントが異なるためですね。&lt;BR&gt;
&lt;BR&gt;
つまり、クエリ①がSQL2008CIAIとSQL2008CSAIで実行できるのはアクセントを区別しない、&lt;BR&gt;
「@つづく」と「@づつく」が区別されない照合順序だからということです。
&lt;BR&gt;
&lt;BR&gt;
&lt;BR&gt;
次は、上記を踏まえて識別子が大文字か小文字かで結果が変わる例。
&lt;/DIV&gt;
&lt;DIV class=QueryTitle&gt;[クエリ④]&lt;/DIV&gt;
&lt;PRE class=SQL name="code"&gt;
SELECT name, modify_date, 'servers' AS 識別子 FROM sys.servers
SELECT name, modify_date, 'Servers' AS 識別子 FROM sys.Servers --頭のSが大文字
&lt;/pre&gt;

&lt;DIV class=ResultTitle&gt;[結果]&lt;/DIV&gt;
&lt;DIV class=result&gt;
&lt;pre&gt;
サーバー名               name                     modify_date             識別子
------------------------ ------------------------ ----------------------- -------
VISTA-NOTE\SQL2008CSAS   VISTA-NOTE\SQL2008CSAS   2008-08-16 22:25:05.373 servers

VISTA-NOTE\SQL2008CSAS(VISTA-NOTE\Route): (1 行処理されました)

VISTA-NOTE\SQL2008CSAS(VISTA-NOTE\Route): メッセージ 208、レベル 16、状態 1、行 2
オブジェクト名 'sys.Servers' が無効です。


サーバー名               name                     modify_date             識別子
------------------------ ------------------------ ----------------------- -------
VISTA-NOTE\SQL2008CSAI   VISTA-NOTE\SQL2008CSAI   2008-09-12 15:51:47.300 servers

VISTA-NOTE\SQL2008CSAI(VISTA-NOTE\Route): (1 行処理されました)

VISTA-NOTE\SQL2008CSAI(VISTA-NOTE\Route): メッセージ 208、レベル 16、状態 1、行 2
オブジェクト名 'sys.Servers' が無効です。


サーバー名               name                     modify_date             識別子
------------------------ ------------------------ ----------------------- -------
VISTA-NOTE\SQL2008CIAS   VISTA-NOTE\SQL2008CIAS   2008-08-13 04:07:31.863 servers

VISTA-NOTE\SQL2008CIAS(VISTA-NOTE\Route): (1 行処理されました)

サーバー名               name                     modify_date             識別子
------------------------ ------------------------ ----------------------- -------
VISTA-NOTE\SQL2008CIAS   VISTA-NOTE\SQL2008CIAS   2008-08-13 04:07:31.863 Servers

VISTA-NOTE\SQL2008CIAS(VISTA-NOTE\Route): (1 行処理されました)


サーバー名               name                     modify_date             識別子
------------------------ ------------------------ ----------------------- -------
VISTA-NOTE\SQL2008CIAI   VISTA-NOTE\SQL2008CIAI   2008-08-16 21:12:59.790 servers

VISTA-NOTE\SQL2008CIAI(VISTA-NOTE\Route): (1 行処理されました)

サーバー名               name                     modify_date             識別子
------------------------ ------------------------ ----------------------- -------
VISTA-NOTE\SQL2008CIAI   VISTA-NOTE\SQL2008CIAI   2008-08-16 21:12:59.790 Servers

VISTA-NOTE\SQL2008CIAI(VISTA-NOTE\Route): (1 行処理されました)
&lt;/pre&gt;
&lt;/DIV&gt;
&lt;DIV class=body_02&gt;
	大文字小文字を区別するとJapanese_CS_ASとJapanese_CS_AIではServersの頭のSが大文字の文で&lt;BR&gt;
	「オブジェクト名 'sys.Servers' が無効です。」というエラーになり、&lt;BR&gt;
	大文字小文字を区別しないJapanese_CI_ASとJapanese_CI_AIではどちらも実行されました。&lt;BR&gt;
	&lt;BR&gt;
	&lt;BR&gt;
	SQL Server 2008のManagement Studioにはインテリセンスの機能が追加されたので&lt;BR&gt;
	識別子の扱いを意識することなくただ表示された候補の中から選択すればよい状態にもなりえますが、&lt;BR&gt;
	照合順序次第でクエリが動くか動かないかも変わるんだよってことをできれば頭の片隅に置いといてくだされ～。&lt;BR&gt;
	&lt;BR&gt;
	この照合順序と識別子の関係は黄色いご本とかにも一応載っていますが、&lt;BR&gt;
	ほんの数行さらっと触れられてるだけなので印象に残らなそうですし。&lt;BR&gt;
	&lt;BR&gt;
	Japanese_CI_ASのインスタンス及びDBを使用していてクエリをプログラム中でゴリゴリ書いているシステムを&lt;BR&gt;
	バイナリ照合順序のサーバーに移して動かしてみると…思いの外、コケたりします。&lt;BR&gt;
	ストアドを使っていたとしてもパラメータ名の大文字小文字が違うって怒られたり。。。&lt;BR&gt;
	&lt;BR&gt;
	そもそも照合順序の異なるサーバーで稼働させることは通常想定されてないでしょうから問題はないと思いますが。&lt;BR&gt;
	（というよりそのシステムに最適な照合順序を選択されている。と願いたい）&lt;BR&gt;
	試してみると面白いですよ。&lt;BR&gt;
	&lt;BR&gt;
	今日書いたことのオフィシャルかつより詳細なことは下記を参照してください。
	&lt;DIV class=refLinks&gt;
		&lt;DIV class=LinkGroup&gt;SQL Server 2008 オンライン ブック&lt;/DIV&gt;
		&lt;UL class=LinkUL&gt;
		  &lt;LI&gt;&lt;A href="http://msdn.microsoft.com/ja-jp/library/ms187582.aspx" target=_blank&gt;照合順序の使用&lt;/A&gt;&lt;/LI&gt;
		  &lt;LI&gt;&lt;A href="http://msdn.microsoft.com/ja-jp/library/ms188686.aspx" target=_blank&gt;識別子の照合順序&lt;/A&gt;&lt;/LI&gt;
		&lt;/UL&gt;
	&lt;/DIV&gt;
&lt;/DIV&gt;&lt;img src ="http://blogs.wankuma.com/route/aggbug/156870.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Route（佐久間　竜也）</dc:creator><title>[SQL Server]認証モードの設定と変更方法いろいろ</title><link>http://blogs.wankuma.com/route/archive/2008/06/12/143047.aspx</link><pubDate>Thu, 12 Jun 2008 07:50:00 GMT</pubDate><guid>http://blogs.wankuma.com/route/archive/2008/06/12/143047.aspx</guid><wfw:comment>http://blogs.wankuma.com/route/comments/143047.aspx</wfw:comment><comments>http://blogs.wankuma.com/route/archive/2008/06/12/143047.aspx#Feedback</comments><slash:comments>483</slash:comments><wfw:commentRss>http://blogs.wankuma.com/route/comments/commentRss/143047.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/route/services/trackbacks/143047.aspx</trackback:ping><description>&lt;div class="normal_div"&gt;
 先日、Windows認証モードに設定された既定のインスタンスが入っている&lt;br&gt;
 ActiveDirectryなしの環境で使用するサーバーと出会いました。&lt;br&gt;
 &lt;br&gt;
 そのままではちょっと困るので、認証モードを変更しようとManagement Studioを探してみるも入ってないw&lt;br&gt;
 いつもはManagement Studioで変更するけど、ない時どうすんべ？&lt;br&gt;
 そういや他の方法知らないや。。。&lt;br&gt;
 &lt;br&gt;
 と思い、ちょいと調べてみたのでメモをアップしますー&lt;br&gt;
 &lt;br&gt;
 ※SQL Server 2008については&lt;a href="http://msdn.microsoft.com/ja-jp/bb851668.aspx" target="_blank"&gt;SQL Server 2008 RC 0&lt;/a&gt;を使用しています。&lt;br&gt;
 &lt;br&gt;
&lt;/div&gt;
&lt;div class="head_01"&gt;認証モードの設定（インストール時）&lt;/div&gt;
&lt;div class="normal_div"&gt;
 認証モードを最初に設定するのはインストールのタイミングです。
&lt;/div&gt;
&lt;div class="head_02"&gt;１.GUIから&lt;/div&gt;
&lt;div class="body_01"&gt;
 ウィザードに従ってWindows認証モードか混合モードかを選択します。 
 &lt;div class="ImgDiv"&gt;
  &lt;img class="thumbnail_01" alt="SqlServer2005のセットアップ" src="http://route.wankuma.com/image/2008/06/2005Setup.jpg" border="0"&gt;
  &lt;img class="thumbnail_01" alt="SqlServer2008のセットアップ" src="http://route.wankuma.com/image/2008/06/2008Setup.jpg" border="0"&gt;
 &lt;/div&gt;
 操作は見たまんまですね。&lt;br&gt;
 詳細は下記を参照してください。
 &lt;div class="refLinks"&gt;
  &lt;div class="LinkGroup"&gt;SQL Server 2005 Books Online&lt;/div&gt;
  &lt;ul class="LinkUL"&gt;
   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/ja-jp/library/ms143219.aspx" target="_blank"&gt;SQL Server 2005 をインストールする方法 (セットアップ)&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;div class="LinkGroup"&gt;SQL Server 2008 オンライン ブック&lt;/div&gt;
  &lt;ul class="LinkUL"&gt;
   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/ja-jp/library/ms143219(SQL.100).aspx" target="_blank"&gt;SQL Server 2008 をインストールする方法 (セットアップ)&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
 &lt;/div&gt;
&lt;/div&gt;
&lt;div class="head_02"&gt;２.コマンドプロンプトから&lt;/div&gt;
&lt;div class="body_01"&gt;
 iniファイルを使用してコマンドプロンプトからインストールを実行する場合は、次のパラメータを使用します。
 &lt;div class="TableDiv"&gt;
  &lt;table class="ListTable_01" cellspacing="0"&gt;
   &lt;thead&gt;
    &lt;tr&gt;&lt;th&gt;認証モード&lt;/th&gt;&lt;th&gt;パラメータ&lt;/th&gt;&lt;/tr&gt;
   &lt;/thead&gt;
   &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;Windows認証モード&lt;/td&gt;&lt;td&gt;なし&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;混合モード&lt;/td&gt;&lt;td&gt;SECURITYMODE=SQL&lt;/td&gt;&lt;/tr&gt;
   &lt;/tbody&gt;
  &lt;/table&gt;
 &lt;/div&gt;
 コマンドプロンプトからのインストールを実際に試したことはないので以上。&lt;br&gt;
 詳細は下記に丸投げ。（気が向いたらそのうちやってみ&amp;#8230;るかもw）
 &lt;div class="refLinks"&gt;
  &lt;div class="LinkGroup"&gt;SQL Server 2005 Books Online&lt;/div&gt;
  &lt;ul class="LinkUL"&gt;
   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/ja-jp/library/ms144259.aspx" target="_blank"&gt;コマンド プロンプトから SQL Server 2005 をインストールする方法&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;div class="LinkGroup"&gt;SQL Server 2008 オンライン ブック&lt;/div&gt;
  &lt;ul class="LinkUL"&gt;
   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/ja-jp/library/ms144259(SQL.100).aspx" target="_blank"&gt;コマンド プロンプトから SQL Server 2008 をインストールする方法&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
 &lt;/div&gt;
&lt;/div&gt;
&lt;div class="head_01"&gt;認証モードの変更（インストール後）&lt;/div&gt;
 &lt;div class="normal_div"&gt;
  １～４のいずれかの操作を行った後にインスタンスの再起動が必要です。&lt;br&gt;&lt;br&gt;
 &lt;/div&gt;
 &lt;div class="head_02"&gt;１.Management Studioからサーバーのプロパティを操作&lt;/div&gt;
 &lt;div class="body_01"&gt;
  一番簡単なのはManagement Studio上からサーバーのプロパティを開いて変更する方法です。 
  &lt;div class="ImgDiv"&gt;
   &lt;img  class="thumbnail_01" alt="サーバーのプロパティ" src="http://route.wankuma.com/image/2008/06/ServerProp.jpg" border="0"&gt;
  &lt;/div&gt;
  これは2005でも2008でも画面レイアウトまで含めてまったく同じ。&lt;br&gt;
  2008のドキュメントでは2005のものと比べてセキュリティメモの部分がちょこっと加筆された模様です。
  &lt;div class="refLinks"&gt;
   &lt;div class="LinkGroup"&gt;SQL Server 2005 Books Online&lt;/div&gt;
   &lt;ul class="LinkUL"&gt;
    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/ja-jp/library/ms188670.aspx" target="_blank"&gt;サーバーの認証モードを変更する方法&lt;/a&gt;&lt;/li&gt;
   &lt;/ul&gt;
   &lt;div class="LinkGroup"&gt;SQL Server 2008 オンライン ブック&lt;/div&gt;
   &lt;ul class="LinkUL"&gt;
    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/ja-jp/library/ms188670(SQL.100).aspx" target="_blank"&gt;サーバーの認証モードを変更する方法&lt;/a&gt;&lt;/li&gt;
   &lt;/ul&gt;
  &lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="head_02"&gt;２.SMOを利用して変更&lt;/div&gt;
 &lt;div class="body_01"&gt;
  SMOを利用する場合はServerクラスが持っているSettingsプロパティ（Settingsクラス）から&lt;br&gt;
  LoginModeを変更します。&lt;br&gt;
  &lt;br&gt;
  認証モードを変更するサーバーがSQLServer2005のインスタンスであれば 
  &lt;ul class="refSettings"&gt;
   &lt;li&gt;Microsoft.SqlServer.ConnectionInfo&lt;/li&gt;
   &lt;li&gt;Microsoft.SqlServer.Smo&lt;/li&gt;
   &lt;li&gt;Microsoft.SqlServer.SqlEnum&lt;/li&gt;
  &lt;/ul&gt;
  への参照を追加してください。&lt;br&gt;
  また、2008のインスタンスの場合は上記３つに加えて
  &lt;ul class="refSettings"&gt;
   &lt;li&gt;Microsoft.SqlServer.Management.Sdk.Sfc&lt;/li&gt;
  &lt;/ul&gt;
  が必要です。&lt;br&gt;
  &lt;br&gt;
  注）2005のSMOアセンブリを使用して2008のインスタンスに接続することはできません。&lt;br&gt;
  　　2008のインスタンスに接続する場合は、2005ではなく2008のアセンブリを参照するようにしてください。
  
&lt;pre class="CSharp" name="code"&gt;using System;
using Microsoft.SqlServer.Management.Smo;
namespace ChangeLoginMode
{
    class Program
    {
        static void Main(string[] args)
        {
            Server Svr = new Server();
            //インスタンスを指定（ここではVM-XPProの既定のインスタンスを使用）
            Svr.ConnectionContext.ServerInstance = "VM-XPPro";
            try
            {
                //接続（既定ではWindows認証）
                Svr.ConnectionContext.Connect();
                if (Svr.Settings.LoginMode == ServerLoginMode.Integrated)
                {
                    //混合モードに変更
                    Svr.Settings.LoginMode = ServerLoginMode.Mixed;
                }
                else
                {
                    //Windows認証モードに変更
                    Svr.Settings.LoginMode = ServerLoginMode.Integrated;
                }
                //LoginModeの変更を反映
                Svr.Alter();
            }
            catch (Exception ex)
            {
                //例外処理は省略
            }
            finally
            {
                //開けたら閉める
                if (Svr.ConnectionContext.IsOpen)Svr.ConnectionContext.Disconnect();
            }
        }
    }
}&lt;/pre&gt;
 LoginModeに設定するServerLoginMode列挙体には次の４つのメンバが含まれます。&lt;br&gt;
 （※レジストリのパスについては４にて後述）
 &lt;div class="TableDiv"&gt;
  &lt;table class="ListTable_01" cellspacing="0"&gt;
   &lt;thead&gt;
    &lt;tr&gt;&lt;th&gt;メンバ名&lt;/th&gt;&lt;th&gt;認証モード&lt;/th&gt;&lt;th&gt;レジストリの値&lt;/th&gt;&lt;/tr&gt;
   &lt;/thead&gt;
   &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;Integrated&lt;/td&gt;&lt;td&gt;Windows認証モード&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Mixed&lt;/td&gt;&lt;td&gt;混合モード&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Normal&lt;/td&gt;&lt;td&gt;(SQLServer認証)&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Unknown&lt;/td&gt;&lt;td&gt;(不明)&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;/tr&gt;
   &lt;/tbody&gt;
  &lt;/table&gt;
 &lt;/div&gt;
 BOLによるとNormalはSQLServer認証を示すとのこと。&lt;br&gt;
 &lt;br&gt;
 SQLServerにはNormalとUnknownにあたる認証モードはないけれど、&lt;br&gt;
 コード上はLoginModeにNormalとUnknownを設定できるので、&lt;br&gt;
 どうなるのか試しにやってみた。&lt;br&gt;
 &lt;br&gt;
 結果&lt;br&gt;
 &lt;br&gt;
 LoginModeにNormalを設定するとレジストリの値が0になって&lt;br&gt;
 挙動としてはWindow認証モードのような感じになり、（内部で正しく動いているのかは不明&amp;#8230;）&lt;br&gt;
 Unknownを設定するとSvr.Alter()の時点で例外（FailedOperationException）が発生しました。 &lt;br&gt;
 &lt;br&gt;
 コード上は設定できてもするなってお話ですね。
 &lt;br&gt;
 &lt;div class="refLinks"&gt;
  &lt;div class="LinkGroup"&gt;SQL Server 2005 Books Online&lt;/div&gt;
  &lt;ul class="LinkUL"&gt;
   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/ja-jp/library/microsoft.sqlserver.management.smo.server.aspx" target="_blank"&gt;Server Class&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/ja-jp/library/microsoft.sqlserver.management.smo.settings.aspx" target="_blank"&gt;Settings Class&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/ja-jp/library/microsoft.sqlserver.management.smo.serverloginmode.aspx" target="_blank"&gt;ServerLoginMode Enumeration&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;div class="LinkGroup"&gt;SQL Server 2008 オンライン ブック&lt;/div&gt;
  &lt;ul class="LinkUL"&gt;
   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/ja-jp/library/microsoft.sqlserver.management.smo.server(SQL.100).aspx" target="_blank"&gt;Server Class&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/ja-jp/library/microsoft.sqlserver.management.smo.settings(SQL.100).aspx" target="_blank"&gt;Settings Class&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/ja-jp/library/microsoft.sqlserver.management.smo.serverloginmode(SQL.100).aspx" target="_blank"&gt;ServerLoginMode Enumeration&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
 &lt;/div&gt;
&lt;/div&gt;
&lt;div class="head_02"&gt;３.xp_instance_regwriteで設定&lt;/div&gt;
&lt;div class="body_01"&gt;
 １と２の方法が裏で何をやってるのか？&lt;br&gt;
 Profilerでトレースしてみるとどちらも同じことしてんじゃんってことがわかります。 &lt;br&gt;
 &lt;br&gt;
 2008のEnterprise Evaluation Editionと2005のStandard Editionの既定のインスタンスと&lt;br&gt;
 2005のDeveloper及びExpress Editionの名前付きインスタンスでやってみたところ、&lt;br&gt;
 混合モードからWindows認証モードへ変更する際どれであっても同じ
&lt;pre class="Sql" name="code"&gt;EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', 
        N'Software\Microsoft\MSSQLServer\MSSQLServer', N'LoginMode', REG_DWORD, 1
&lt;/pre&gt;
 が使われていました。&lt;br&gt;
 混合モードにする時は最後の引数が「2」になります。&lt;br&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;div class="head_02"&gt;４.レジストリを直接書き換える&lt;/div&gt;
&lt;div class="body_01"&gt;
 上記の１～３の方法はすべてサーバーに接続しないと行えない方法です。&lt;br&gt;
 しかし、結局のところレジストリに書かれているLoginModeの値で認証モードを切り替えているだけなので、&lt;br&gt;
 接続しなくてもそこを直接書き換えれば変更できます。 （荒業w）&lt;br&gt;
 &lt;br&gt;
 今回使用した環境ではそれぞれ次の場所にLoginModeの値がありました。&lt;br&gt;
 ①～③は同じ仮想マシンにインストールした順番です。&lt;br&gt;
 &lt;br&gt;
 ①2008 Enterprise Evaluation Edition の既定のインスタンス&lt;br&gt;
 →HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQLServer&lt;br&gt;
 &lt;br&gt;
 ②2005 Developer Edition の名前付きインスタンス&lt;br&gt;
 →HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\MSSQLServer &lt;br&gt;
 &lt;br&gt;
 ③2005 Express Edition の名前付きインスタンス&lt;br&gt;
 →HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.2\MSSQLServer&lt;br&gt;
 &lt;br&gt;
 認証モードはインスタンス毎の設定なので、&lt;br&gt;
 複数のインスタンスが存在する場合はそれぞれの場所に値が書き込まれています。 &lt;br&gt;
 &lt;br&gt;
 どうしてもレジストリを直接いじりたくてしょうがない人は、&lt;br&gt;
 目的のインスタンスのレジストリの場所を探して自己責任の範囲内でやってみてください。
&lt;/div&gt;&lt;img src ="http://blogs.wankuma.com/route/aggbug/143047.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Route（佐久間　竜也）</dc:creator><title>オープン</title><link>http://blogs.wankuma.com/route/archive/2008/05/25/139318.aspx</link><pubDate>Sun, 25 May 2008 19:10:00 GMT</pubDate><guid>http://blogs.wankuma.com/route/archive/2008/05/25/139318.aspx</guid><wfw:comment>http://blogs.wankuma.com/route/comments/139318.aspx</wfw:comment><comments>http://blogs.wankuma.com/route/archive/2008/05/25/139318.aspx#Feedback</comments><slash:comments>120</slash:comments><wfw:commentRss>http://blogs.wankuma.com/route/comments/commentRss/139318.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/route/services/trackbacks/139318.aspx</trackback:ping><description>&lt;P&gt;サブタイトルは今のところ未定。&lt;/P&gt;
&lt;P&gt;デザイン等細かいことはそのうちそのうち。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://photo-log.route-n.com/"&gt;PhotoLog&lt;/A&gt;以外のRoute-nオープンです。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;当面はたぶん、SQLServerのメモが多くなるんじゃないかと思います。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/route/aggbug/139318.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>