<?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>SQL Server 2008</title><link>http://blogs.wankuma.com/kaya/category/1688.aspx</link><description>SQL Server 2008関連</description><managingEditor>今川 美保(夏椰) {Miho Imagawa as Kaya}</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>今川 美保(夏椰) {Miho Imagawa as Kaya}</dc:creator><title>SQLServerのメルマガ</title><link>http://blogs.wankuma.com/kaya/archive/2009/08/31/180685.aspx</link><pubDate>Mon, 31 Aug 2009 13:02:00 GMT</pubDate><guid>http://blogs.wankuma.com/kaya/archive/2009/08/31/180685.aspx</guid><wfw:comment>http://blogs.wankuma.com/kaya/comments/180685.aspx</wfw:comment><comments>http://blogs.wankuma.com/kaya/archive/2009/08/31/180685.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kaya/comments/commentRss/180685.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kaya/services/trackbacks/180685.aspx</trackback:ping><description>&lt;a href="http://blogs.technet.com/sqlpm-j/archive/2009/08/05/club-insight-sql-server-sql-server-vol-1.aspx"&gt;Club Insight にて SQL Server のメルマガ「えす！エス！レスキュー SQL Server -どっぷりリファレン中！！- Vol. 1」が発行されています&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://blogs.technet.com/sqlpm-j/pages/sample-sql-server-vol-1.aspx"&gt;[Sample] えす！エス！レスキュー SQL Server -どっぷりリファレン中！！- Vol. 1&lt;/a&gt;

&lt;br /&gt;
&lt;br /&gt;
知らぬ間に紹介されていました(ｗ&lt;br /&gt;
しかもVol1は全文・・・・&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
わたし、そんなに自己アピールしたくないですけどｗｗｗｗ&lt;br /&gt;
&lt;img src ="http://blogs.wankuma.com/kaya/aggbug/180685.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>夏椰-kaya- (今川 美保)</dc:creator><title>datetimeoffsetとdatetime2のデータ型優先順位について</title><link>http://blogs.wankuma.com/kaya/archive/2008/10/14/158788.aspx</link><pubDate>Tue, 14 Oct 2008 15:51:00 GMT</pubDate><guid>http://blogs.wankuma.com/kaya/archive/2008/10/14/158788.aspx</guid><wfw:comment>http://blogs.wankuma.com/kaya/comments/158788.aspx</wfw:comment><comments>http://blogs.wankuma.com/kaya/archive/2008/10/14/158788.aspx#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kaya/comments/commentRss/158788.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kaya/services/trackbacks/158788.aspx</trackback:ping><description>&lt;DIV&gt;&lt;A href="http://msdn.microsoft.com/ja-jp/library/ms190309.aspx"&gt;データ型の優先順位 (Transact-SQL)&lt;/A&gt;にて SQLServer2008に新たに増えたデータ型「datetimeoffset｣｢datetime2｣は&lt;BR&gt;&lt;STRONG&gt;datetime&lt;/STRONG&gt;よりも優先順位が上に書かれています。&lt;BR&gt;&lt;BR&gt;では、本当にそうなのか検証してみます。&lt;BR&gt;&lt;BR&gt;まずは、データ型をチェックする関数を作成します。&lt;BR&gt;&lt;PRE&gt;&lt;CODE&gt;
create function [dbo].[GetProp](@col as sql_variant)
returns 
 @ret table(
  [BaseType] varchar(max),
  [Precision] int,
  [Scale] int,
  [TotalBytes] int,
  [Collation] varchar(max),
  [MaxLength] int
 )
begin
 insert into @ret 
 select
 cast(SQL_VARIANT_PROPERTY (@col,'BaseType') as varchar(max)) as 'BaseType',
 cast(SQL_VARIANT_PROPERTY (@col,'Precision') as int) as 'Precision',
 cast(SQL_VARIANT_PROPERTY (@col,'Scale') as int) as 'Scale',
 cast(SQL_VARIANT_PROPERTY (@col,'TotalBytes') as int) as 'TotalBytes',
 cast(SQL_VARIANT_PROPERTY (@col,'Collation') as varchar(max)) as 'Collation',
 cast(SQL_VARIANT_PROPERTY (@col,'MaxLength') as int) as 'MaxLength';
 return;
end ;
 &lt;/CODE&gt;&lt;/PRE&gt;&lt;BR&gt;&lt;BR&gt;では、この関数を使って、&lt;BR&gt;
&lt;UL&gt;
&lt;LI&gt;datetime + datetimeoffset 
&lt;LI&gt;datetime + datetime2&lt;/LI&gt;&lt;/UL&gt;2パターンの加算をしてみたいと思います。&lt;BR&gt;&lt;BR&gt;&lt;PRE&gt;&lt;CODE&gt;
SELECT * FROM
GetProp(
CAST('2007-01-01 23:59:59' as datetime)
 + 
CAST('1900-01-01 00:00:01.000' as datetime2)
)
SELECT * FROM
GetProp(
CAST('2007-01-01 23:59:59' as datetime)
 + 
CAST('1900-01-01 00:00:01.000 -9:00' as datetimeoffset)
)
 &lt;/CODE&gt;&lt;/PRE&gt;&lt;BR&gt;&lt;BR&gt;この2つのSQLを実際に動かした結果は以下のとおりです。&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH&gt;BaseType&lt;/TH&gt;
&lt;TH&gt;Precision&lt;/TH&gt;
&lt;TH&gt;Scale&lt;/TH&gt;
&lt;TH&gt;TotalBytes&lt;/TH&gt;
&lt;TH&gt;Collation&lt;/TH&gt;
&lt;TH&gt;MaxLength&lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;datetime&lt;/TD&gt;
&lt;TD&gt;23&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;10&lt;/TD&gt;
&lt;TD&gt;NULL&lt;/TD&gt;
&lt;TD&gt;8&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;datetime&lt;/TD&gt;
&lt;TD&gt;23&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;10&lt;/TD&gt;
&lt;TD&gt;NULL&lt;/TD&gt;
&lt;TD&gt;8&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR&gt;&lt;BR&gt;あれ・・・・って感じですよね。&lt;BR&gt;&lt;BR&gt;GetProp関数内で使用しているSQL_VARIANT_PROPERTYが未対応なのかしら?と思って、&lt;BR&gt;テーブルを作成してみました。&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;PRE&gt;&lt;CODE&gt;
CREATE TABLE [dbo].[tb2](
 [dto] [datetimeoffset](7) NOT NULL,
 [dt] [datetime] NOT NULL,
 [dto+dt]  AS ([dto]+[dt])
) ON [PRIMARY]
 &lt;/CODE&gt;&lt;/PRE&gt;これにデータを1件突っ込んで表示させてみました。&lt;BR&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH&gt;dto&lt;/TH&gt;
&lt;TH&gt;dt&lt;/TH&gt;
&lt;TH&gt;dto+dt&lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1900-01-02 00:00:01.0000000 -09:00&lt;/TD&gt;
&lt;TD&gt;2007-01-01 23:59:59.000&lt;/TD&gt;
&lt;TD&gt;2007-01-03 00:00:00.000&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR&gt;&lt;BR&gt;どうみてもdatetimeですね・・・・。&lt;BR&gt;&lt;BR&gt;う～んと、とりあえずMSDNライブラリからフィードバック流しておいたけど、&lt;BR&gt;他にしておく事はあるかしらん? &lt;/DIV&gt;
&lt;DIV&gt;#ちなみにsmalldatetimeでも同様にsmalldatetimeの勝ち!でした・・・&lt;/DIV&gt;
&lt;DIV&gt;#またまた追記&lt;/DIV&gt;
&lt;DIV&gt;#&amp;nbsp; timestamp(30)+varbinary(1) = varbinary(16byte maxlength=70) &lt;/DIV&gt;
&lt;DIV&gt;#&amp;nbsp; timestamp(30)+binary(1) = varbinay (42byte maxlength=70)&lt;/DIV&gt;
&lt;DIV&gt;#またまたまたまた追記&lt;/DIV&gt;
&lt;DIV&gt;# nchar + varchar = nvarchar&lt;/DIV&gt;&lt;img src ="http://blogs.wankuma.com/kaya/aggbug/158788.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>夏椰-kaya- (今川 美保)</dc:creator><title>わかりにくっ</title><link>http://blogs.wankuma.com/kaya/archive/2008/08/20/153692.aspx</link><pubDate>Wed, 20 Aug 2008 17:33:00 GMT</pubDate><guid>http://blogs.wankuma.com/kaya/archive/2008/08/20/153692.aspx</guid><wfw:comment>http://blogs.wankuma.com/kaya/comments/153692.aspx</wfw:comment><comments>http://blogs.wankuma.com/kaya/archive/2008/08/20/153692.aspx#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kaya/comments/commentRss/153692.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kaya/services/trackbacks/153692.aspx</trackback:ping><description>&lt;P&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=58ce885d-508b-45c8-9fd3-118edd8e6fff&amp;amp;DisplayLang=ja"&gt;Microsoft&amp;#174; SQL Server&amp;#174; 2008 Express &lt;/A&gt;のダウンロードページがありますが、&lt;/P&gt;
&lt;P&gt;私は、&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=6b10c7c1-4f97-42c4-9362-58d4d088cd38&amp;amp;DisplayLang=ja"&gt; Microsoft&amp;#174; SQL Server&amp;#174; 2008 Enterprise Evaluation: 開発者用トライアル版 &lt;/A&gt;からダウンロードして&lt;/P&gt;
&lt;P&gt;プルダウンで、Express/Express Advanced Editionを選んで入れました。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;そういう事をちゃんと明記してくれないとわかりくいと思います。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;で、所々、まだ英語が残っていますね。&lt;/P&gt;
&lt;P&gt;フィードバックの送信ダイアログなど、もろ英語のままでしたし&amp;#8230;。&lt;/P&gt;
&lt;P&gt;急いで出したのがバレバレです。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;まぁ、なんにせよ、これからSQL Server 2008と仲良くやっていこうと思います♪&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/kaya/aggbug/153692.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>夏椰-kaya- (今川 美保)</dc:creator><title>日本語照合順序 Japanese と Japanese_XJIS_100、Japanese_Bushu_Kakusu_100　の比較を行っているページ</title><link>http://blogs.wankuma.com/kaya/archive/2008/07/09/148114.aspx</link><pubDate>Wed, 09 Jul 2008 12:25:00 GMT</pubDate><guid>http://blogs.wankuma.com/kaya/archive/2008/07/09/148114.aspx</guid><wfw:comment>http://blogs.wankuma.com/kaya/comments/148114.aspx</wfw:comment><comments>http://blogs.wankuma.com/kaya/archive/2008/07/09/148114.aspx#Feedback</comments><slash:comments>28</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kaya/comments/commentRss/148114.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kaya/services/trackbacks/148114.aspx</trackback:ping><description>&lt;P&gt;&lt;A href="http://blogs.msdn.com/sqljapan/default.aspx"&gt;SQL Server 開発チームブログ&lt;/A&gt;にて &lt;A href="http://blogs.msdn.com/sqljapan/archive/2008/06/16/japanese-japanese-xjis-100-japanese-bushu-kakusu-100.aspx"&gt;日本語照合順序 Japanese と Japanese_XJIS_100、Japanese_Bushu_Kakusu_100　の比較 &lt;/A&gt;を行った記事があります。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;今度は部首や画数もですか・・・。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/kaya/aggbug/148114.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>夏椰-kaya- (今川 美保)</dc:creator><title>Sync Framework &amp; SQL Server 2008 RC0</title><link>http://blogs.wankuma.com/kaya/archive/2008/07/02/146770.aspx</link><pubDate>Wed, 02 Jul 2008 13:19:00 GMT</pubDate><guid>http://blogs.wankuma.com/kaya/archive/2008/07/02/146770.aspx</guid><wfw:comment>http://blogs.wankuma.com/kaya/comments/146770.aspx</wfw:comment><comments>http://blogs.wankuma.com/kaya/archive/2008/07/02/146770.aspx#Feedback</comments><slash:comments>135</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kaya/comments/commentRss/146770.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kaya/services/trackbacks/146770.aspx</trackback:ping><description>&lt;P&gt;見事にはまりました&amp;#8230;。&lt;/P&gt;
&lt;P&gt;SQL Server 2008にはMicrosoft Sync Framework v1.0 RC0 and Sync Services for ADO.NET v2.0 RC0 が入っています。&lt;/P&gt;
&lt;P&gt;see → &lt;A href="http://blogs.msdn.com/sync/archive/2008/06/09/announcing-sync-framework-v1-0-rc0-and-sync-services-for-ado-net-v2-0-rc0.aspx"&gt;Microsoft Sync Framework BLOG&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;で、Microsoft Sync Frameworkのサンプルコードたちはまだ CTP2 です。&lt;/P&gt;
&lt;P&gt;see→&lt;A href="http://code.msdn.microsoft.com/sync"&gt;MSDN Code Gallary - Microsoft Sync Framework&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;で、私の環境はSQL Server 2008 RC0をフルインストールしてあるので、&lt;BR&gt;Sync Framework v1.0 RC0、ADO.NET v2.0 RC0が入っています。&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;ここに、Sync Framework CTP2達をインストールして、サンプルコードを実行すると&lt;/P&gt;
&lt;P&gt;Framework内でNullReferenceExceptionを起こします。&lt;BR&gt;&lt;BR&gt;で、一度、Sync Framework V1.0 RC0 Sync Services for ADO.NET v2.0をアンインストールし、&lt;BR&gt;Sync Framework v1.0 CTP2をアンインストールして、&lt;BR&gt;もう一度CTP2だけを入れなおしたら、サンプルコードが動くようになりました&amp;#8230;。&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;BR&gt;こういうハマり方って疲れますね。 そうそう、おいら、もうMVPぢゃないです♪&lt;BR&gt;&lt;FONT color=#d3d3d3 size=1&gt;#いつ言っていいタイミングかわからんかったわ☆&lt;/FONT&gt;&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/kaya/aggbug/146770.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>夏椰-kaya- (今川 美保)</dc:creator><title>データ変更の追跡で遊んでみた。</title><link>http://blogs.wankuma.com/kaya/archive/2008/06/30/146361.aspx</link><pubDate>Mon, 30 Jun 2008 15:36:00 GMT</pubDate><guid>http://blogs.wankuma.com/kaya/archive/2008/06/30/146361.aspx</guid><wfw:comment>http://blogs.wankuma.com/kaya/comments/146361.aspx</wfw:comment><comments>http://blogs.wankuma.com/kaya/archive/2008/06/30/146361.aspx#Feedback</comments><slash:comments>281</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kaya/comments/commentRss/146361.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kaya/services/trackbacks/146361.aspx</trackback:ping><description>SQL Server 2008 &lt;A href="http://msdn.microsoft.com/ja-jp/library/bb933994(SQL.100).aspx"&gt;データ変更の追跡&lt;/A&gt;で遊んでみました♪&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;データ変更の追跡には2種類存在しています。&lt;BR&gt;
&lt;UL&gt;
&lt;LI&gt;変更の追跡 
&lt;DIV&gt;データやテーブル等の変更が行われたことを履歴で管理するが&lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt;、変更した内容は保持していない。&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;変更データキャプチャ 
&lt;DIV&gt;データやテーブル等の変更が行われたことを履歴で管理するが、&lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt;変更したデータ内容を保持している。&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;BR&gt;この2種類のは履歴データを保持しているか否かです。&lt;BR&gt;それぞれ設定の仕方が異なりますので、2種類書いてみたいと思います。&lt;BR&gt;まずは、変更の追跡からです。&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;TESTというデータベースを作成して、 tbというテーブルを作成しました。 
&lt;DIV style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc"&gt;&lt;PRE&gt;&lt;CODE&gt;
CREATE TABLE [dbo].[tb](
    [id] [decimal](18, 0) NOT NULL,
    [value] [nvarchar](max) NULL,
 CONSTRAINT [PK_tb] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
&lt;/CODE&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;この状態で、まずはデータベースに対して「変更の追跡」をするように設定します。&lt;BR&gt;
&lt;DIV style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc"&gt;&lt;PRE&gt;&lt;CODE&gt;
ALTER DATABASE TEST
&lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt;SET CHANGE_TRACKING = ON&lt;/SPAN&gt;
&lt;/CODE&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;次にテーブルに対して「変更の追跡」をするように設定します。&lt;BR&gt;
&lt;DIV style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc"&gt;&lt;PRE&gt;&lt;CODE&gt;
ALTER TABLE tb
&lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt;ENABLE CHANGE_TRACKING
WITH (TRACK_COLUMNS_UPDATED = ON)&lt;/SPAN&gt;
&lt;/CODE&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;この状態でTESTデータベースのtbテーブルに対して「変更の追跡」が実行されています。&lt;BR&gt;&lt;BR&gt;以下のSQL文にて「変更の追跡」が実行されていることを確認します。&lt;BR&gt;
&lt;DIV style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc"&gt;&lt;PRE&gt;&lt;CODE&gt;
SELECT *, c.sys_change_version from tb 
CROSS APPLY  &lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt;CHANGETABLE ( version tb, (id),(tb.id)) c&lt;/SPAN&gt;; 
&lt;/CODE&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;このSQLでエラーメッセージが表示されず、レコードが0件で結果が取得されていればOKです。&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;ここで「変更の追跡」を行っているtbテーブルと&lt;A href="http://msdn.microsoft.com/ja-jp/library/ms177634.aspx"&gt;CROSS APPLY&lt;/A&gt;している&lt;A href="http://msdn.microsoft.com/ja-jp/library/bb934145(SQL.100).aspx"&gt;CHANGETABLE&lt;/A&gt;は&lt;BR&gt;テーブルに対する変更情報を返す、&lt;A href="http://msdn.microsoft.com/ja-jp/library/bb964727(SQL.100).aspx"&gt;変更追跡関数&lt;/A&gt;です。&lt;BR&gt;&lt;FONT style="COLOR: gray"&gt;#CHANGETABLE (VERSION)の方を使用しています。&lt;/FONT&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;さて、ここでテーブルに列を追加し、データを1件追加たいと思います。&lt;BR&gt;実行するSQLは以下のものです。&lt;BR&gt;
&lt;DIV style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc"&gt;&lt;PRE&gt;&lt;CODE&gt;
ALTER TABLE tb ADD  [buf] nvarchar(max) null ;
go
insert into tb values(1,N'テスト',CAST(CHANGE_TRACKING_CURRENT_VERSION() as nvarchar));
&lt;/CODE&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;&lt;A href="http://msdn.microsoft.com/ja-jp/library/bb933945(SQL.100).aspx"&gt;CHANGE_TRACKING_CURRENT_VERSION()&lt;/A&gt;でbuf列に更新前時点でのバージョンを入れておきました。&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;ここで以下のSQLを実行してみたいと思います。&lt;BR&gt;
&lt;DIV style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc"&gt;&lt;PRE&gt;&lt;CODE&gt;
DECLARE @min_valid_version bigint;
declare @i bigint;
set @min_valid_version = 
    CHANGE_TRACKING_MIN_VALID_VERSION(OBJECT_ID('tb'));
set @i = CHANGE_TRACKING_CURRENT_VERSION() -1;

while @i &amp;gt;= @min_valid_version
begin 
    SELECT
        SYS_CHANGE_VERSION,
        SYS_CHANGE_CREATION_VERSION,
        case SYS_CHANGE_OPERATION
        WHEN 'U' THEN 'UPDATE'
        WHEN 'I' THEN 'INSERT'
        WHEN 'D' THEN 'DELETE'
        ELSE '-'
        END AS OPERATION_TYPE,
    CASE 
    WHEN 
        CHANGE_TRACKING_IS_COLUMN_IN_MASK(
        COLUMNPROPERTY(
            OBJECT_ID('tb'),'id','ColumnId'), 
        SYS_CHANGE_COLUMNS) = 1  THEN 'id' 
    WHEN 
        CHANGE_TRACKING_IS_COLUMN_IN_MASK(
        COLUMNPROPERTY(
            OBJECT_ID('tb'),'value','ColumnId'), 
        SYS_CHANGE_COLUMNS) = 1  THEN 'value' 
    WHEN 
        CHANGE_TRACKING_IS_COLUMN_IN_MASK(
        COLUMNPROPERTY(
            OBJECT_ID('tb'),'buf','ColumnId'), 
        SYS_CHANGE_COLUMNS) = 1  THEN 'buf' 
    end as TARGET_COLUMN_NAME
    from CHANGETABLE 
        (changes tb, @i) AS c;
    set @i = @i -1 ;
end
go
&lt;/CODE&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;FONT style="COLOR: gray"&gt;#CHANGETABLE (CHANGES)の方を使用しています。&lt;/FONT&gt;&lt;BR&gt;
&lt;TABLE style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc" border=1&gt;
&lt;CAPTION&gt;CHANGETABLE (CHANGES)&lt;/CAPTION&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH&gt;SYS_CHANGE_VERSION&lt;/TH&gt;
&lt;TH&gt;SYS_CHANGE_CREATION_VERSION&lt;/TH&gt;
&lt;TH&gt;OPERATION_TYPE&lt;/TH&gt;
&lt;TH&gt;TARGET_COLUMN_NAME&lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;27&lt;/TD&gt;
&lt;TD&gt;27&lt;/TD&gt;
&lt;TD&gt;INSERT&lt;/TD&gt;
&lt;TD&gt;id&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR&gt;&lt;BR&gt;
&lt;DIV style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc"&gt;&lt;PRE&gt;&lt;CODE&gt;
ALTER TABLE tb ADD  [buf] nvarchar(max) null ;
go
insert into tb values(1,N'テスト',CAST(CHANGE_TRACKING_CURRENT_VERSION() as nvarchar));
&lt;/CODE&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;TABLE style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc" border=1&gt;
&lt;CAPTION&gt;CHANGETABLE (VERSION)&lt;/CAPTION&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH&gt;id&lt;/TH&gt;
&lt;TH&gt;value&lt;/TH&gt;
&lt;TH&gt;buf&lt;/TH&gt;
&lt;TH&gt;SYS_CHANGE_VERSION&lt;/TH&gt;
&lt;TH&gt;SYS_CHANGE_CONTEXT&lt;/TH&gt;
&lt;TH&gt;id&lt;/TH&gt;
&lt;TH&gt;sys_change_version&lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;テスト&lt;/TD&gt;
&lt;TD&gt;NULL&lt;/TD&gt;
&lt;TD&gt;27&lt;/TD&gt;
&lt;TD&gt;NULL&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;27&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;次にUPDATEを実行します。&lt;BR&gt;&lt;BR&gt;
&lt;DIV style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc"&gt;&lt;PRE&gt;&lt;CODE&gt;
update tb set value = CAST(CHANGE_TRACKING_CURRENT_VERSION() as nvarchar) where id = 1;
&lt;/CODE&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;そして先ほどと同じSQL(2種)を再実行してみます。&lt;BR&gt;
&lt;TABLE style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc" border=1&gt;
&lt;CAPTION&gt;CHANGETABLE (CHANGES)&lt;/CAPTION&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH&gt;SYS_CHANGE_VERSION&lt;/TH&gt;
&lt;TH&gt;SYS_CHANGE_CREATION_VERSION&lt;/TH&gt;
&lt;TH&gt;OPERATION_TYPE&lt;/TH&gt;
&lt;TH&gt;TARGET_COLUMN_NAME&lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;28&lt;/TD&gt;
&lt;TD&gt;NULL&lt;/TD&gt;
&lt;TD&gt;UPDATE&lt;/TD&gt;
&lt;TD&gt;value&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;TABLE style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc" border=1&gt;
&lt;CAPTION&gt;CHANGETABLE (CHANGES)&lt;/CAPTION&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH&gt;SYS_CHANGE_VERSION&lt;/TH&gt;
&lt;TH&gt;SYS_CHANGE_CREATION_VERSION&lt;/TH&gt;
&lt;TH&gt;OPERATION_TYPE&lt;/TH&gt;
&lt;TH&gt;TARGET_COLUMN_NAME&lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;28&lt;/TD&gt;
&lt;TD&gt;27&lt;/TD&gt;
&lt;TD&gt;INSERT&lt;/TD&gt;
&lt;TD&gt;id&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR&gt;&lt;BR&gt;
&lt;TABLE style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc" border=1&gt;
&lt;CAPTION&gt;CHANGETABLE (VERSION)&lt;/CAPTION&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH&gt;id&lt;/TH&gt;
&lt;TH&gt;value&lt;/TH&gt;
&lt;TH&gt;buf&lt;/TH&gt;
&lt;TH&gt;SYS_CHANGE_VERSION&lt;/TH&gt;
&lt;TH&gt;SYS_CHANGE_CONTEXT&lt;/TH&gt;
&lt;TH&gt;id&lt;/TH&gt;
&lt;TH&gt;sys_change_version&lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;27&lt;/TD&gt;
&lt;TD&gt;NULL&lt;/TD&gt;
&lt;TD&gt;28&lt;/TD&gt;
&lt;TD&gt;NULL&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;28&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;こんな感じになります。&lt;BR&gt;&lt;BR&gt;使い方としては、今までテーブルに更新前日付を持っていて、更新前日付と更新直前に取得した更新前日付が一致したらUPDATEを実行する～&lt;BR&gt;って業務ロジックがあったかと思いますが、これからはこの機能を使用して、更新前のバージョンを取得してチェックする方向になるのかなぁ？って感じがします。&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;さて、「変更の追跡」の解除をします。&lt;BR&gt;&lt;BR&gt;SQLは以下のとおりです。設定はDB→テーブルだったので、解除は逆のテーブル→DBとなります。&lt;BR&gt;
&lt;DIV style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc"&gt;&lt;PRE&gt;&lt;CODE&gt;
ALTER TABLE tb
DISABLE CHANGE_TRACKING
go
ALTER DATABASE TEST
SET CHANGE_TRACKING = OFF
go
&lt;/CODE&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;
&lt;HR&gt;
&lt;BR&gt;&lt;BR&gt;さて次に「変更データキャプチャ」を実行してみます。&lt;BR&gt;&lt;BR&gt;まずは有効化から行います。&lt;BR&gt;
&lt;DIV style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc"&gt;&lt;PRE&gt;&lt;CODE&gt;
EXEC sys.sp_cdc_enable_db;
EXEC sys.sp_cdc_enable_table @source_schema='dbo',@source_name='tb',@role_name='cdc_Admin';
&lt;/CODE&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;1行目が変更データキャプチャの有効化です。&lt;BR&gt;2行目にテーブルに対して変更データキャプチャの設定をしています。&lt;BR&gt;2行目の処理がうまく実行されると以下のようなメッセージが表示されます。&lt;BR&gt;
&lt;DIV style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc"&gt;&lt;PRE&gt;&lt;CODE&gt;
ジョブ 'cdc.TEST_capture' が正常に開始しました。
ジョブ 'cdc.TEST_cleanup' が正常に開始しました。
&lt;/CODE&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR&gt;変更データキャプチャはジョブで動いているようです。&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;変更データキャプチャも&lt;A href="http://msdn.microsoft.com/ja-jp/library/bb510744(SQL.100).aspx"&gt;変更データキャプチャの関数&lt;/A&gt;として関数が用意されています。&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;有効化したデータキャプチャを確認するには以下のSQLを実行してみます。&lt;BR&gt;
&lt;DIV style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc"&gt;&lt;PRE&gt;&lt;CODE&gt;
EXEC sys.sp_cdc_help_change_data_capture @source_schema='dbo',@source_name='tb'
&lt;/CODE&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;TABLE style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH&gt;source_schema&lt;/TH&gt;
&lt;TH&gt;source_table&lt;/TH&gt;
&lt;TH&gt;&lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt;capture_instance&lt;/SPAN&gt;&lt;/TH&gt;
&lt;TH&gt;object_id&lt;/TH&gt;
&lt;TH&gt;source_object_id start_lsn&lt;/TH&gt;
&lt;TH&gt;end_lsn&lt;/TH&gt;
&lt;TH&gt;supports_net_changes has_drop_pending role_name&lt;/TH&gt;
&lt;TH&gt;index_name&lt;/TH&gt;
&lt;TH&gt;filegroup_name&lt;/TH&gt;
&lt;TH&gt;create_date&lt;/TH&gt;
&lt;TH&gt;index_column_list&lt;/TH&gt;
&lt;TH&gt;captured_column_list&lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;dbo&lt;/TD&gt;
&lt;TD&gt;tb&lt;/TD&gt;
&lt;TD&gt;&lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt;dbo_tb&lt;/SPAN&gt;&lt;/TD&gt;
&lt;TD&gt;341576255&lt;/TD&gt;
&lt;TD&gt;2105058535&lt;/TD&gt;
&lt;TD&gt;0x0000001A000000AF0039&lt;/TD&gt;
&lt;TD&gt;NULL&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;NULL&lt;/TD&gt;
&lt;TD&gt;cdc_Admin&lt;/TD&gt;
&lt;TD&gt;PK_tb&lt;/TD&gt;
&lt;TD&gt;NULL&lt;/TD&gt;
&lt;TD&gt;2008-06-30 15:05:54.997&lt;/TD&gt;
&lt;TD&gt;[id]&lt;/TD&gt;
&lt;TD&gt;[id], [value]&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR&gt;&lt;BR&gt;変更データキャプチャ用の関数はキャプチャインスタンスの名前が関数名に入るので、この関数名をチェックしておいてください。&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;それではこの状態で先ほどと同じように列の追加とINSERT文を実行します。 
&lt;DIV style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc"&gt;&lt;PRE&gt;&lt;CODE&gt;
ALTER TABLE tb ADD  [buf] nvarchar(max) null ;
go
insert into tb values(1,N'テスト',CAST(CHANGE_TRACKING_CURRENT_VERSION() as nvarchar));
&lt;/CODE&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;その後以下のSQLを実行し履歴取得をします。&lt;BR&gt;
&lt;DIV style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc"&gt;&lt;PRE&gt;&lt;CODE&gt;
SELECT 
    __$start_lsn as CMTLSN,
    case __$operation
    when 1 then 'DELETE'
    when 2 then 'INSERT'
    when 3 then 'UPDATE(PREV)'
    when 4 then 'UPDATE(AFTER)'
    else '-'
    end as operation,
    id, value
FROM cdc.fn_cdc_get_all_changes_dbo_tb(
(select MIN(__$start_lsn) from cdc.dbo_tb_CT), (select MAX(__$start_lsn) from cdc.dbo_tb_CT), 'all')
order by CMTLSN;
&lt;/CODE&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;
&lt;TABLE style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH&gt;CMTLSN&lt;/TH&gt;
&lt;TH&gt;operation&lt;/TH&gt;
&lt;TH&gt;id&lt;/TH&gt;
&lt;TH&gt;value&lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;0x0000001E000001BD0013&lt;/TD&gt;
&lt;TD&gt;INSERT&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;テスト&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR&gt;&lt;BR&gt;次にUPDATE文です。 
&lt;DIV style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc"&gt;&lt;PRE&gt;&lt;CODE&gt;
update tb set value = CAST(CHANGE_TRACKING_CURRENT_VERSION() as nvarchar) where id = 1;
&lt;/CODE&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;実行した後に再び履歴取得をしてみます。 
&lt;TABLE style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH&gt;CMTLSN&lt;/TH&gt;
&lt;TH&gt;operation&lt;/TH&gt;
&lt;TH&gt;id&lt;/TH&gt;
&lt;TH&gt;value&lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;0x0000001E000001BD0013&lt;/TD&gt;
&lt;TD&gt;INSERT&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;テスト&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;0x0000001F0000007D0004&lt;/TD&gt;
&lt;TD&gt;UPDATE(AFTER)&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;NULL&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR&gt;&lt;BR&gt;データ変更キャプチャでは変更した分だけデータが蓄積されて、変更内容も保持されているのがわかるかと思います。&lt;BR&gt;&lt;FONT sytle="color:gray;"&gt;ただ、変更データキャプチャを実行した後に追加した列はキャプチャ対象になっていないので注意です。&lt;/FONT&gt; &lt;BR&gt;&lt;BR&gt;この用途は今まで業務ロジックで行ってきた履歴管理を丸投げできるって感じですかねぇ&amp;#8230;。&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;・・・っとキャプチャの止め方を記述することを忘れていました。 
&lt;DIV style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc"&gt;&lt;PRE&gt;&lt;CODE&gt;
EXEC sys.sp_cdc_disable_table @source_schema='dbo',@source_name='tb',@capture_instance='dbo_tb';
EXEC sys.sp_cdc_disable_db;
&lt;/CODE&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR&gt;この状態で 
&lt;DIV style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc"&gt;&lt;PRE&gt;&lt;CODE&gt;
EXEC sys.sp_cdc_help_change_data_capture @source_schema='dbo',@source_name='tb';

&lt;FONT color=red&gt;メッセージ 22901、レベル 16、状態 1、プロシージャ sp_cdc_help_change_data_capture、行 19
データベース 'TEST' で Change Data Capture が有効になっていません。適切なデータベース コンテキストが設定されていることを確認し、操作を再試行してください。Change Data Capture で有効なデータベースについてレポートを作成するには、sys.databases カタログ ビューの is_cdc_enabled 列を照会してください。
&lt;/FONT&gt;
&lt;/CODE&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR&gt;となっていれば停止しています。&lt;BR&gt;この後に再度、開始しても今までの履歴はなくなっていますので注意が必要です。&lt;BR&gt;(これはどちらの変更の追跡でも一緒です)&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;こんな感じで、ちょっと便利なものができたと思っていただけたら幸いです。&lt;img src ="http://blogs.wankuma.com/kaya/aggbug/146361.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>夏椰-kaya- (今川 美保)</dc:creator><title>リソースガバナを設定してみる。</title><link>http://blogs.wankuma.com/kaya/archive/2008/06/27/146028.aspx</link><pubDate>Fri, 27 Jun 2008 14:51:00 GMT</pubDate><guid>http://blogs.wankuma.com/kaya/archive/2008/06/27/146028.aspx</guid><wfw:comment>http://blogs.wankuma.com/kaya/comments/146028.aspx</wfw:comment><comments>http://blogs.wankuma.com/kaya/archive/2008/06/27/146028.aspx#Feedback</comments><slash:comments>337</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kaya/comments/commentRss/146028.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kaya/services/trackbacks/146028.aspx</trackback:ping><description>今日はリソースガバナで遊んでみました♪&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;SQL Server 2008からリソースガバナって機能がありまして、&lt;BR&gt;ワークロードとシステムリソースの消費を管理できるようになりました♪&lt;BR&gt;詳細は&lt;A href="http://msdn.microsoft.com/ja-jp/library/bb933866(SQL.100).aspx"&gt;SQL Server のワークロードとリソースの管理&lt;/A&gt;を参照して下さい。&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;さて、今回は以下の事を行います。&lt;BR&gt;
&lt;UL&gt;
&lt;LI&gt;リソースプール作成&lt;/LI&gt;
&lt;LI&gt;ワークロード グループの作成&lt;/LI&gt;
&lt;LI&gt;振り分け関数の作成&lt;/LI&gt;&lt;/UL&gt;&lt;BR&gt;&lt;BR&gt;というわけで、さっそくリソースプールを作成します。&lt;BR&gt;
&lt;DIV style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc"&gt;&lt;PRE&gt;&lt;CODE&gt;
IF  EXISTS ( SELECT name FROM &lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt;sys.resource_governor_resource_pools&lt;/SPAN&gt; WHERE name = N'GTEST')
BEGIN
    DROP RESOURCE POOL [GTEST]
END
GO
CREATE RESOURCE POOL [GTEST] WITH
(&lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt;
    min_cpu_percent=0, 
    max_cpu_percent=50, 
    min_memory_percent=0, 
    max_memory_percent=50
&lt;/SPAN&gt;)
GO
&lt;/CODE&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR&gt;作成したリソースプールのお名前は&lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt;GTESTでCPU使用率0～50%、最大メモリ使用率0～50%&lt;/SPAN&gt;で設定しました。&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;さてお次はワークロードグループの作成をします。 
&lt;DIV style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc"&gt;&lt;PRE&gt;&lt;CODE&gt;
IF  EXISTS ( SELECT name FROM &lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt;sys.resource_governor_workload_groups&lt;/SPAN&gt; WHERE name = N'LowProc')
BEGIN
    DROP WORKLOAD GROUP [LowProc]
END
GO
CREATE WORKLOAD GROUP [LowProc] WITH
(&lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt;
    group_max_requests=0, 
    importance=Medium, 
    request_max_cpu_time_sec=0, 
    request_max_memory_grant_percent=25, 
    request_memory_grant_timeout_sec=0, 
    max_dop=0
&lt;/SPAN&gt;) USING &lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt;[GTEST]&lt;/SPAN&gt;
GO
IF  EXISTS ( SELECT name FROM &lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt;sys.resource_governor_workload_groups&lt;/SPAN&gt; WHERE name = N'Normalproc')
BEGIN
    DROP WORKLOAD GROUP [Normalproc]
END
GO
CREATE WORKLOAD GROUP [Normalproc] WITH
(&lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt;
    group_max_requests=0, 
    importance=High, 
    request_max_cpu_time_sec=0, 
    request_max_memory_grant_percent=25, 
    request_memory_grant_timeout_sec=0, 
    max_dop=0
&lt;/SPAN&gt;) USING &lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt;[GTEST]&lt;/SPAN&gt;
GO
&lt;/CODE&gt;&lt;/PRE&gt;&lt;/DIV&gt;ここでは&lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt;LowProc、NormalProc&lt;/SPAN&gt;という2種類のワークロードグループをGTESTというリソースプールに対して作成しています。&lt;BR&gt;LowProc、NormalProcともに同時要求の最大数、要求が使用できる最大 CPU 時間(s)、1 つの要求にプールから割り当てられる最大メモリ量(%)、&lt;BR&gt;メモリ許可(作業バッファメモリ)が使用可能になるのをクエリが待機できる最大時間、を同じにしていますが、&lt;BR&gt;ワークロード グループでの要求の相対的な重要度をMediumとHighに分けています。&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;ここまでで、リソースプールとワークロードができましたが、&lt;BR&gt;実際にどのワークロードを使うのかというのを判定させる関数を作る必要があります。&lt;BR&gt;次はその関数を作成します。&lt;BR&gt;&lt;BR&gt;
&lt;DIV style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc"&gt;&lt;PRE&gt;&lt;CODE&gt;
USE [master]
GO
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Choose]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
    DROP FUNCTION [dbo].[Choose]
GO
USE [master]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[Choose] ()
RETURNS SYSNAME WITH SCHEMABINDING
BEGIN
    DECLARE @val varchar(32);
    if 'localhost\imagawa' = SUSER_NAME()
        SET @val = &lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt;'LowProc'&lt;/SPAN&gt;;
    else if 'puser' = SUSER_NAME()
        SET @val = &lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt;'NormalProc'&lt;/SPAN&gt;;
    return @val;
END
GO
&lt;/CODE&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR&gt;関数を見てお気づきかと思いますが、&lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt;作成したワークグループのお名前&lt;/SPAN&gt;が戻り値になります。&lt;BR&gt;ちなみに、この関数は&lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt;必ずmasterに作る&lt;/SPAN&gt;必要があります。&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;関数を作っただけでは、割り当ての際に関数が呼ばれないので、関数を呼び出すように設定します。&lt;BR&gt;
&lt;DIV style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc"&gt;&lt;PRE&gt;&lt;CODE&gt;
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = &lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt;dbo.Choose&lt;/SPAN&gt;);
GO
&lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt;ALTER RESOURCE GOVERNOR RECONFIGURE;&lt;/SPAN&gt;
GO
&lt;/CODE&gt;&lt;/PRE&gt;&lt;/DIV&gt;CLASSIFIER_FUNCTIONの引数に作成した関数を指定してALTER RESOURCE GOVERNORを実行し、そのあとに&lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt;ALTER RESOURCE GOVERNOR RECONFIGURE;&lt;/SPAN&gt;を実行してリソースガバナの再構成を行います。&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 style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc"&gt;&lt;PRE&gt;&lt;CODE&gt;
select sys.dm_exec_sessions.original_login_name,
        sys.resource_governor_workload_groups.name,
        sys.resource_governor_workload_groups.importance,
        sys.resource_governor_resource_pools.name
 from sys.dm_exec_sessions join 
    sys.resource_governor_workload_groups  on 
    sys.dm_exec_sessions.group_id = sys.resource_governor_workload_groups.group_id
    join sys.resource_governor_resource_pools on sys.resource_governor_resource_pools.pool_id = sys.resource_governor_workload_groups.pool_id
;
&lt;/CODE&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;
&lt;TABLE style="COLOR: #556b2f; BACKGROUND-COLOR: #f5f5dc" border=1&gt;
&lt;CAPTION&gt;実行結果&lt;/CAPTION&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;localhost\imagawa&lt;/TD&gt;
&lt;TD&gt;LowProc&lt;/TD&gt;
&lt;TD&gt;Medium&lt;/TD&gt;
&lt;TD&gt;GTEST&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;localhost\imagawa&lt;/TD&gt;
&lt;TD&gt;default&lt;/TD&gt;
&lt;TD&gt;Medium&lt;/TD&gt;
&lt;TD&gt;default&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;NT AUTHORITY\SYSTEM&lt;/TD&gt;
&lt;TD&gt;default&lt;/TD&gt;
&lt;TD&gt;Medium&lt;/TD&gt;
&lt;TD&gt;default&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;puser&lt;/TD&gt;
&lt;TD&gt;NormalProc&lt;/TD&gt;
&lt;TD&gt;High&lt;/TD&gt;
&lt;TD&gt;GTEST&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;puser&lt;/TD&gt;
&lt;TD&gt;NormalProc&lt;/TD&gt;
&lt;TD&gt;High&lt;/TD&gt;
&lt;TD&gt;GTEST&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;localhost\imagawa&lt;/TD&gt;
&lt;TD&gt;LowProc&lt;/TD&gt;
&lt;TD&gt;Medium&lt;/TD&gt;
&lt;TD&gt;GTEST&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;localhost\imagawa&lt;/TD&gt;
&lt;TD&gt;LowProc&lt;/TD&gt;
&lt;TD&gt;Medium&lt;/TD&gt;
&lt;TD&gt;GTEST&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;こんな感じで、ログインユーザ名、ワークロードグループ名とその重要度、リソースプール名が表示されます。&lt;BR&gt;&lt;BR&gt;リソースガバナの設定をする前にログインしていたものはdefaultのままですが、&lt;BR&gt;ログインしなおしたものについては設定がきくようになりました♪&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;・・・・今日は、ちょっとやばぁい精神状態なので、この辺でおさらば♪&lt;img src ="http://blogs.wankuma.com/kaya/aggbug/146028.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>夏椰-kaya- (今川 美保)</dc:creator><title>ポリシーベースで管理</title><link>http://blogs.wankuma.com/kaya/archive/2008/06/25/145505.aspx</link><pubDate>Wed, 25 Jun 2008 16:24:00 GMT</pubDate><guid>http://blogs.wankuma.com/kaya/archive/2008/06/25/145505.aspx</guid><wfw:comment>http://blogs.wankuma.com/kaya/comments/145505.aspx</wfw:comment><comments>http://blogs.wankuma.com/kaya/archive/2008/06/25/145505.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kaya/comments/commentRss/145505.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kaya/services/trackbacks/145505.aspx</trackback:ping><description>SQL Server 2008からインスタンスをポリシーベースで管理できるようになりました。&lt;BR&gt;&lt;A href="http://msdn.microsoft.com/ja-jp/library/bb510667(SQL.100).aspx"&gt;ポリシー ベースの管理を使用したサーバーの管理&lt;/A&gt;参照&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;話すとものすご～く長くなりそうなので、簡単に手順を載せる程度で。&lt;BR&gt;&lt;A href="http://msdn.microsoft.com/ja-jp/library/bb522659(SQL.100).aspx"&gt;チュートリアル : ポリシー ベースの管理を使用したサーバーの管理&lt;/A&gt;がMSDNライブラリにありますので、&lt;BR&gt;詳しく知りたい方はそちらもご覧ください。&lt;BR&gt;&lt;BR&gt;まずは、現状の管理ファセットをエクスポートする方法です。&lt;BR&gt;SQL Server Management Studioを起動して、オブジェクトエクスプローラでインスタンスの部分を右クリックすると&lt;BR&gt;以下のようなメニューが出てきます。&lt;BR&gt;&lt;IMG alt=右クリックメニュー src="http://kaya.wankuma.com/forBlog/20080625/view0.png"&gt;&lt;BR&gt;このメニューから&lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt; facets &lt;/SPAN&gt;を選んでクリックして下さい。&lt;BR&gt;&lt;BR&gt;クリックするとファセットの表示画面が出てきます。&lt;BR&gt;&lt;IMG alt=ファセットの表示 src="http://kaya.wankuma.com/forBlog/20080625/view1.png"&gt;&lt;BR&gt;&lt;BR&gt;ここで、ファセットの種類を選んで、このメニューから&lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt; 現在の状態をポリシーとしてエクスポート&lt;/SPAN&gt;を選んでクリックして下さい。&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;ちなみに、プルダウンに表示されるのはこんな感じです。&lt;BR&gt;&lt;IMG alt=ファセットの表示 src="http://kaya.wankuma.com/forBlog/20080625/view2.png"&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;さて、ファセット表示画面でエクスポートを選んだ後ですが、以下の画面が出てきます。&lt;BR&gt;&lt;IMG alt=ファセットの表示2 src="http://kaya.wankuma.com/forBlog/20080625/view1-1.png"&gt;&lt;BR&gt;ここで、このメニューから&lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt; ローカルサーバへ &lt;/SPAN&gt;を選んで「OK」をクリックして下さい。&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;エクスポートしたポリシートはオブジェクトエクスプローラに表示されます。&lt;BR&gt;&lt;IMG alt=エクスポートしたファセット src="http://kaya.wankuma.com/forBlog/20080625/view3.png"&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;このエクスポートしたポリシーを選んで右クリックすると以下のようなメニューが出るので &lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt;評価 &lt;/SPAN&gt;を選んでください。&lt;BR&gt;&lt;BR&gt;&lt;IMG alt=エクスポートしたファセット src="http://kaya.wankuma.com/forBlog/20080625/view4.png"&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;評価を選ぶと、次のように選んだポリシーを自動的に評価してくれます。&lt;BR&gt;&lt;IMG alt=評価結果 src="http://kaya.wankuma.com/forBlog/20080625/view5.png"&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;ここで、左側メニューにある &lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt;ポリシーの選択 &lt;/SPAN&gt;を選ぶと、サーバ上にあるポリシーが表示されるので、評価にチェックを入れて「評価」ボタンを押下すると&lt;BR&gt;選んだポリシーの分だけチェックしてくれます。&lt;BR&gt;&lt;IMG alt=ポリシー選択 src="http://kaya.wankuma.com/forBlog/20080625/view6.png"&gt;&lt;BR&gt;&lt;IMG alt=ポリシー選択評価 src="http://kaya.wankuma.com/forBlog/20080625/view7.png"&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;ポリシー評価の履歴を見るには、オブジェクトエクスプローラで、 &lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt;ポリシー管理 または ポリシー &lt;/SPAN&gt;を右クリックして、表示されたメニューの &lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt;facets &lt;/SPAN&gt;&lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt;履歴 &lt;/SPAN&gt;を選択します。&lt;BR&gt;&lt;BR&gt;&lt;IMG alt=履歴選択 src="http://kaya.wankuma.com/forBlog/20080625/view8.png"&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;そうするとログファイルの表示画面が表示され、ポリシーの履歴を見ることができます。&lt;BR&gt;&lt;IMG alt=履歴表示 src="http://kaya.wankuma.com/forBlog/20080625/view9.png"&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;今はまだ、SQL Server 2008を1インスタンスしかあげていないので、試していませんが、&lt;BR&gt;ポリシーを右クリックしたときに &lt;SPAN style="BORDER-BOTTOM: #ff7f50 1px inset"&gt;ポリシーのインポート &lt;/SPAN&gt;があるので、きっと、複数台で同じポリシーを適用・評価するのには便利なんでしょうね。&lt;BR&gt;&lt;BR&gt;ちょっといぢっていてこんなもの見つけちゃった程度の内容でした。&lt;img src ="http://blogs.wankuma.com/kaya/aggbug/145505.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>夏椰-kaya- (今川 美保)</dc:creator><title>ちょいと愚痴(SQL Server 2008 CTPについて)</title><link>http://blogs.wankuma.com/kaya/archive/2008/03/21/128978.aspx</link><pubDate>Fri, 21 Mar 2008 20:37:00 GMT</pubDate><guid>http://blogs.wankuma.com/kaya/archive/2008/03/21/128978.aspx</guid><wfw:comment>http://blogs.wankuma.com/kaya/comments/128978.aspx</wfw:comment><comments>http://blogs.wankuma.com/kaya/archive/2008/03/21/128978.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kaya/comments/commentRss/128978.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kaya/services/trackbacks/128978.aspx</trackback:ping><description>&lt;P&gt;会社のPC(WinXPSP2-32bit)ではクエリが実行できない。&lt;/P&gt;
&lt;P&gt;select 'a';すら実行されない・・・・。&lt;/P&gt;
&lt;P&gt;もともとSQLServer2005 Management Studio2005Express+VS2005が入っていたのも影響しているのかなぁ・・・・？&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#a9a9a9 size=1&gt;#インストールフォルダはかぶらないようにしたんだけどなぁ&amp;#8230;。&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;オブジェクトエクスプローラで、DBなどの情報が出ているのですが、&lt;/P&gt;
&lt;P&gt;クエリの実行だけが出来ないんですよね。&lt;/P&gt;
&lt;P&gt;利用状況モニタを見ても、SQLが届いていないみたいだし&amp;#8230;。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;気になって、自宅のPC(WinVistaUltimate-32bit)でSQL Server 2008 CTP　Febを入れて&lt;/P&gt;
&lt;P&gt;クエリを実行してみたら、普通に実行できたよ・・・・。&lt;/P&gt;
&lt;P&gt;自宅PCにはVS2005、SQLServer2005もなにも入っていない状況だから、&lt;/P&gt;
&lt;P&gt;そのあたりが関連しているんでしょうか・・・。&lt;/P&gt;
&lt;P&gt;う～～ん。なぞ過ぎる(苦笑&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;とりあえずどちらのOSとも必要要件満たしているのに。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;a href="http://msdn2.microsoft.com/ja-jp/library/ms143506(SQL.100).aspx"&gt;SQL Server 2008 のインストールに必要なハードウェアおよびソフトウェア&lt;/a&gt;&lt;img src ="http://blogs.wankuma.com/kaya/aggbug/128978.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>夏椰-kaya- (今川 美保)</dc:creator><title>hierarchyidで遊んでみた.(@ SQL Server 2008 CTP Feb)</title><link>http://blogs.wankuma.com/kaya/archive/2008/03/19/128582.aspx</link><pubDate>Wed, 19 Mar 2008 15:30:00 GMT</pubDate><guid>http://blogs.wankuma.com/kaya/archive/2008/03/19/128582.aspx</guid><wfw:comment>http://blogs.wankuma.com/kaya/comments/128582.aspx</wfw:comment><comments>http://blogs.wankuma.com/kaya/archive/2008/03/19/128582.aspx#Feedback</comments><slash:comments>15</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kaya/comments/commentRss/128582.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kaya/services/trackbacks/128582.aspx</trackback:ping><description>&lt;P&gt;今日はSQL Server 2008から登場する「hierarchyid」という型で遊んでみました。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;RTableというお名前で以下のテーブルを作成しました。&lt;/P&gt;
&lt;P&gt;idがキーでpidが自分が日もづくデータのidが格納されている状態になります。&lt;/P&gt;
&lt;TABLE border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH&gt;id&lt;/TH&gt;
&lt;TH&gt;kname&lt;/TH&gt;
&lt;TH&gt;pid&lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;0000&lt;/TD&gt;
&lt;TD&gt;社長&lt;/TD&gt;
&lt;TD&gt;NULL&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1000&lt;/TD&gt;
&lt;TD&gt;本部長&lt;/TD&gt;
&lt;TD&gt;0000&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2000&lt;/TD&gt;
&lt;TD&gt;開発部長&lt;/TD&gt;
&lt;TD&gt;1000&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3000&lt;/TD&gt;
&lt;TD&gt;運用部長&lt;/TD&gt;
&lt;TD&gt;1000&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3010&lt;/TD&gt;
&lt;TD&gt;社員a&lt;/TD&gt;
&lt;TD&gt;3000&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3020&lt;/TD&gt;
&lt;TD&gt;社員b&lt;/TD&gt;
&lt;TD&gt;3000&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3030&lt;/TD&gt;
&lt;TD&gt;社員c&lt;/TD&gt;
&lt;TD&gt;3000&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2100&lt;/TD&gt;
&lt;TD&gt;開発係長1&lt;/TD&gt;
&lt;TD&gt;2000&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2200&lt;/TD&gt;
&lt;TD&gt;開発係長1&lt;/TD&gt;
&lt;TD&gt;2000&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2110&lt;/TD&gt;
&lt;TD&gt;社員A&lt;/TD&gt;
&lt;TD&gt;2100&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2120&lt;/TD&gt;
&lt;TD&gt;社員B&lt;/TD&gt;
&lt;TD&gt;2100&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2130&lt;/TD&gt;
&lt;TD&gt;社員C&lt;/TD&gt;
&lt;TD&gt;2100&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2140&lt;/TD&gt;
&lt;TD&gt;社員D&lt;/TD&gt;
&lt;TD&gt;2100&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;さて、これに対してSQL　Server　2005では、階層的にとる再帰SQLがありました。→&lt;A href="http://blogs.wankuma.com/kaya/archive/2006/10/27/42656.aspx"&gt;see&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;まずは再帰SQLで書いてみます。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV style="COLOR: #002665; BACKGROUND-COLOR: #f6f1df"&gt;&lt;PRE&gt;&lt;CODE&gt;
with q (id, kname, pid, level)
as
(
  select  id, kname, pid, 0 from RTable where pid is null
 union all
 select RTable .id, RTable .kname, RTable .pid, q.level+1 from RTable join q on RTable.pid = q.id
)
SELECT                  id, kname, pid, level
FROM                    q
&lt;/CODE&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;結果は以下の通りなります。 &lt;/P&gt;
&lt;DIV style="COLOR: #002665; BACKGROUND-COLOR: #f6f1df"&gt;
&lt;TABLE border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH&gt;id&lt;/TH&gt;
&lt;TH&gt;kname&lt;/TH&gt;
&lt;TH&gt;pid&lt;/TH&gt;
&lt;TH&gt;level&lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;0000&lt;/TD&gt;
&lt;TD&gt;社長&lt;/TD&gt;
&lt;TD&gt;NULL&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1000&lt;/TD&gt;
&lt;TD&gt;本部長&lt;/TD&gt;
&lt;TD&gt;0000&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2000&lt;/TD&gt;
&lt;TD&gt;開発部長&lt;/TD&gt;
&lt;TD&gt;1000&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3000&lt;/TD&gt;
&lt;TD&gt;運用部長&lt;/TD&gt;
&lt;TD&gt;1000&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3010&lt;/TD&gt;
&lt;TD&gt;社員a&lt;/TD&gt;
&lt;TD&gt;3000&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3020&lt;/TD&gt;
&lt;TD&gt;社員b&lt;/TD&gt;
&lt;TD&gt;3000&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3030&lt;/TD&gt;
&lt;TD&gt;社員c&lt;/TD&gt;
&lt;TD&gt;3000&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2100&lt;/TD&gt;
&lt;TD&gt;開発係長1&lt;/TD&gt;
&lt;TD&gt;2000&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2200&lt;/TD&gt;
&lt;TD&gt;開発係長1&lt;/TD&gt;
&lt;TD&gt;2000&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2110&lt;/TD&gt;
&lt;TD&gt;社員A&lt;/TD&gt;
&lt;TD&gt;2100&lt;/TD&gt;
&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2120&lt;/TD&gt;
&lt;TD&gt;社員B&lt;/TD&gt;
&lt;TD&gt;2100&lt;/TD&gt;
&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2130&lt;/TD&gt;
&lt;TD&gt;社員C&lt;/TD&gt;
&lt;TD&gt;2100&lt;/TD&gt;
&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2140&lt;/TD&gt;
&lt;TD&gt;社員D&lt;/TD&gt;
&lt;TD&gt;2100&lt;/TD&gt;
&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;
&lt;P&gt;さて今度はSQL Server 2008から登場したhierarchyid君を使用して同じ結果を取得してみたいと思います。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV style="COLOR: #002665; BACKGROUND-COLOR: #f6f1df"&gt;&lt;PRE&gt;&lt;CODE&gt;
with q (id, kname, pid, &lt;STRONG&gt;&lt;U&gt;path&lt;/U&gt;&lt;/STRONG&gt;)
as
(
  select  id, kname, pid,&lt;U&gt;&lt;STRONG&gt;hierarchyid::GetRoot()&lt;/STRONG&gt;&lt;/U&gt; as root from RTable where pid is null
 union all
 select RTable .id, RTable .kname, RTable .pid, cast( &lt;U&gt;&lt;STRONG&gt;path.ToString()&lt;/STRONG&gt;&lt;/U&gt; + cast(&lt;STRONG&gt;&lt;U&gt;path.GetLevel()&lt;/U&gt;&lt;/STRONG&gt; as varchar)+ &lt;U&gt;&lt;STRONG&gt;'/'&lt;/STRONG&gt;&lt;/U&gt; as &lt;STRONG&gt;&lt;U&gt;hierarchyid&lt;/U&gt;&lt;/STRONG&gt;) from RTable join q on RTable.pid = q.id
)
SELECT                  id, kname, pid,  &lt;STRONG&gt;&lt;U&gt;path.GetLevel()&lt;/U&gt;&lt;/STRONG&gt;
FROM                    q
&lt;/CODE&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;ポイントになるのは再帰クエリでは初期データのレベルを0と書いていましたが&lt;/P&gt;
&lt;P&gt;これが&lt;A href="http://msdn2.microsoft.com/en-us/library/bb677194(SQL.100).aspx"&gt;hierarcyid::GetRoot()&lt;/A&gt;というものに置き換わりました。&lt;/P&gt;
&lt;P&gt;これでノードの初期値を設定しています。&lt;/P&gt;
&lt;P&gt;次にレベルの加算をしていた部分が長ったらしく書き変わりました。&lt;/P&gt;
&lt;P&gt;これはわかりやすく表現すると『&lt;STRONG&gt;/0/1/2/&lt;/STRONG&gt;』のように階層のパスを作成して新しいhierarchyidを作成しています。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/bb677195(SQL.100).aspx"&gt;path.ToString()&lt;/A&gt;でそれまでの階層の『/0/1/』を文字列として取得し、今のレベルを&lt;A href="http://msdn2.microsoft.com/en-us/library/bb677197(SQL.100).aspx"&gt;path.GetLevel()&lt;/A&gt;で取得して連結し、『/0/1/2』を作成して&lt;/P&gt;
&lt;P&gt;最後に/を付加して『/0/1/2/』という文字列を作っています。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;出力するときもパスからそのhierarchyidのレベルをGetLevel()で取得して表示しています。&lt;/P&gt;
&lt;P&gt;結果は一緒なので、割愛♪&lt;/P&gt;
&lt;P&gt;ちなみに最後のGetLevel()をToString()に置き換えるとこう出力されます。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV style="COLOR: #002665; BACKGROUND-COLOR: #f6f1df"&gt;
&lt;TABLE border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH&gt;id&lt;/TH&gt;
&lt;TH&gt;kname&lt;/TH&gt;
&lt;TH&gt;pid&lt;/TH&gt;
&lt;TH&gt;expr1&lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;0000&lt;/TD&gt;
&lt;TD&gt;社長&lt;/TD&gt;
&lt;TD&gt;NULL&lt;/TD&gt;
&lt;TD&gt;/&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1000&lt;/TD&gt;
&lt;TD&gt;本部長&lt;/TD&gt;
&lt;TD&gt;0000&lt;/TD&gt;
&lt;TD&gt;/0/&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2000&lt;/TD&gt;
&lt;TD&gt;開発部長&lt;/TD&gt;
&lt;TD&gt;1000&lt;/TD&gt;
&lt;TD&gt;/0/1/&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3000&lt;/TD&gt;
&lt;TD&gt;運用部長&lt;/TD&gt;
&lt;TD&gt;1000&lt;/TD&gt;
&lt;TD&gt;/0/1/&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3010&lt;/TD&gt;
&lt;TD&gt;社員a&lt;/TD&gt;
&lt;TD&gt;3000&lt;/TD&gt;
&lt;TD&gt;/0/1/2/&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3020&lt;/TD&gt;
&lt;TD&gt;社員b&lt;/TD&gt;
&lt;TD&gt;3000&lt;/TD&gt;
&lt;TD&gt;/0/1/2/&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3030&lt;/TD&gt;
&lt;TD&gt;社員c&lt;/TD&gt;
&lt;TD&gt;3000&lt;/TD&gt;
&lt;TD&gt;/0/1/2/&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2100&lt;/TD&gt;
&lt;TD&gt;開発係長1&lt;/TD&gt;
&lt;TD&gt;2000&lt;/TD&gt;
&lt;TD&gt;/0/1/2/&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2200&lt;/TD&gt;
&lt;TD&gt;開発係長1&lt;/TD&gt;
&lt;TD&gt;2000&lt;/TD&gt;
&lt;TD&gt;/0/1/2/&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2110&lt;/TD&gt;
&lt;TD&gt;社員A&lt;/TD&gt;
&lt;TD&gt;2100&lt;/TD&gt;
&lt;TD&gt;/0/1/2/3/&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2120&lt;/TD&gt;
&lt;TD&gt;社員B&lt;/TD&gt;
&lt;TD&gt;2100&lt;/TD&gt;
&lt;TD&gt;/0/1/2/3/&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2130&lt;/TD&gt;
&lt;TD&gt;社員C&lt;/TD&gt;
&lt;TD&gt;2100&lt;/TD&gt;
&lt;TD&gt;/0/1/2/3/&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2140&lt;/TD&gt;
&lt;TD&gt;社員D&lt;/TD&gt;
&lt;TD&gt;2100&lt;/TD&gt;
&lt;TD&gt;/0/1/2/3/&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;さてさて、ここまでがざっくりhierarchyidの使い方って感じです。&lt;/P&gt;
&lt;P&gt;次はhierarchyidをテーブルに持ってやろうと思います♪&lt;/P&gt;
&lt;P&gt;RTableのpidをhid(hierarchyid)に変えてデータを突っ込んでみました。&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#d3d3d3 size=1&gt;#全データ入れるのが面倒だったから適当に入れてみた&lt;/FONT&gt;&lt;/P&gt;
&lt;DIV style="COLOR: #002665; BACKGROUND-COLOR: #f6f1df"&gt;
&lt;TABLE border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;0000&lt;/TD&gt;
&lt;TD&gt;社長&lt;/TD&gt;
&lt;TD&gt;/&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1000&lt;/TD&gt;
&lt;TD&gt;本部長&lt;/TD&gt;
&lt;TD&gt;/1/&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2000&lt;/TD&gt;
&lt;TD&gt;開発部長&lt;/TD&gt;
&lt;TD&gt;/1/1/&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3000&lt;/TD&gt;
&lt;TD&gt;運用部長&lt;/TD&gt;
&lt;TD&gt;/1/2/&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2100&lt;/TD&gt;
&lt;TD&gt;開発係長1&lt;/TD&gt;
&lt;TD&gt;/1/1/1/&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2200&lt;/TD&gt;
&lt;TD&gt;開発係長2&lt;/TD&gt;
&lt;TD&gt;/1/1/21/&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3010&lt;/TD&gt;
&lt;TD&gt;社員A&lt;/TD&gt;
&lt;TD&gt;/1/2/1/&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;このテーブルからレベルが2のものを取得しようと思うと以下のようなSQLになります。&lt;/P&gt;
&lt;DIV style="COLOR: #002665; BACKGROUND-COLOR: #f6f1df"&gt;&lt;PRE&gt;&lt;CODE&gt;
SELECT                  id, kname, hid
FROM                     HTable
WHERE                   (hid.GetLevel() = 2)
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;TABLE border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;2000&lt;/TD&gt;
&lt;TD&gt;開発部長&lt;/TD&gt;
&lt;TD&gt;/1/1/&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3000&lt;/TD&gt;
&lt;TD&gt;運用部長&lt;/TD&gt;
&lt;TD&gt;/1/2/&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;テーブルに入れてあげるとSQLがすっきりしますね（^^)&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#a9a9a9 size=1&gt;#本当は&lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/bb677203(SQL.100).aspx"&gt;&lt;FONT color=#a9a9a9 size=1&gt;IsDescendant&lt;/FONT&gt;&lt;/A&gt;&lt;FONT color=#a9a9a9 size=1&gt;をしたかったんだけど、動かすとManagementStudioが落ちるからあきらめた・・・・orz&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/kaya/aggbug/128582.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>