<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</title><link>http://blogs.sqlpassj.org/hotikisu/category/550.aspx</link><description>SQL Serverに関するTips</description><managingEditor>ホチキス先生</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>ホチキス先生</dc:creator><title>TechEd 2008 Yokohama - Day 1 - 3 - T5-303「SQL Server 2008 Reporting Services徹底詳細とサイト作成の実践」</title><link>http://blogs.sqlpassj.org/hotikisu/archive/2008/08/27/25492.aspx</link><pubDate>Wed, 27 Aug 2008 13:13:00 GMT</pubDate><guid>http://blogs.sqlpassj.org/hotikisu/archive/2008/08/27/25492.aspx</guid><wfw:comment>http://blogs.sqlpassj.org/hotikisu/comments/25492.aspx</wfw:comment><comments>http://blogs.sqlpassj.org/hotikisu/archive/2008/08/27/25492.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.sqlpassj.org/hotikisu/comments/commentRss/25492.aspx</wfw:commentRss><trackback:ping>http://blogs.sqlpassj.org/hotikisu/services/trackbacks/25492.aspx</trackback:ping><description>&lt;P&gt;SQL ServerのReporting ServiceはSQL Server 2000からすでに搭載されていたらしいが、SQL Server 2008では大きく変わっている。表の種類や表現力が向上したことはもちろん、ガントチャートやスピードメーターのような「ゲージ」と呼ばれるものも作ることができるようになった。&lt;/P&gt;
&lt;P&gt;デモではVisual Studioから「レポートサーバープロジェクト」を開始することでレポート作成が始められた。時系列に沿ったデータから折れ線グラフを作り、株価の評価でおなじみの移動平均線やボリンジャーバンドを追加する、あるいは色や線などデザインに変更を加えるなどの操作がGUIによって簡単にできることが示された。&lt;/P&gt;
&lt;P&gt;またレポートにリッチテキストボックスを作り、修飾された文字の中にフィールドのデータを挿入することも簡単にできる。これはまるでWordの「差し込み印刷」のような簡単さで、テーブルからフィールドをドラッグするだけで請求書に宛名や住所を記入するというデモだった。&lt;/P&gt;
&lt;P&gt;レポート表示時に特定のデータを絞り込んで表示する、動的クエリのような機能をおこなうものが「パラメータ」である。パラメータの機能は従来からある機能だが、デモでは円グラフのレポートを作り、その円グラフの一部をクリックすると、そのデータの詳細を表示する「ジャンプ」というものだった。このとき、ジャンプ先で表示されるレポートでは、クリックされた円グラフのデータで絞り込まれるのだが、この機能を実装するのも、商品区分 = @P1といった変数を使い、円グラフのラベルのプロパティで「アクション」という項目を編集する。このあたりの仕組みは、まるでFLASHのアクションスクリプトを編集するような感じだった。&lt;/P&gt;
&lt;P&gt;作成したレポートの配置は、従来はIISが必須だったが、SQL Server 2008からはIISを使わなくても、専用のレポートサーバーが利用できる。このサーバーの実態はIISと同じだということだ。&lt;/P&gt;
&lt;P&gt;サーバーに接続してブラウジングしなくても「レポートの自動配信」という機能もある。これは設定によって特定の日時にレポートを作成してユーザーに配布するといったものだ。決まった定型のレポートはこれで配信すれば、サーバーの負荷が軽減されていい。&lt;/P&gt;&lt;img src ="http://blogs.sqlpassj.org/hotikisu/aggbug/25492.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ホチキス先生</dc:creator><title> TechEd 2008 Yokohama - Day 1 - 2 - T5-201「SQL Server 2008全体概要を徹底解説」</title><link>http://blogs.sqlpassj.org/hotikisu/archive/2008/08/27/25491.aspx</link><pubDate>Wed, 27 Aug 2008 02:14:00 GMT</pubDate><guid>http://blogs.sqlpassj.org/hotikisu/archive/2008/08/27/25491.aspx</guid><wfw:comment>http://blogs.sqlpassj.org/hotikisu/comments/25491.aspx</wfw:comment><comments>http://blogs.sqlpassj.org/hotikisu/archive/2008/08/27/25491.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.sqlpassj.org/hotikisu/comments/commentRss/25491.aspx</wfw:commentRss><trackback:ping>http://blogs.sqlpassj.org/hotikisu/services/trackbacks/25491.aspx</trackback:ping><description>&lt;P&gt;SQL Server 2008には大きく5つの特徴がある。そのひとつは「高品質・高信頼」である。SQL Server 2008は基本的にSQL Server 2005をベースに開発しており、すでに安定して稼働する実績がある。このSQL Server 2005に対して、2つの開発プロセスで開発を行った、ひとつは「メインライン」と呼ばれるもので、SQL Server本体を安定に動かし、常に出荷可能に近い状態を保つプロセスだ。もうひとつは新しい機能を加えるプロセスで「インプルーブメント」と呼ばれている。こちらは各機能ごとに開発を行い、単体機能として完成した時点でSQL Server本体に加えられる。この2つの開発プロセスによって、安定した高品質・高信頼のSQL Server 2008の開発ができた。 &lt;/P&gt;
&lt;P&gt;2つめの特徴は「コンプライアンスの実現」であり、これには「透過的データ暗号化」、「ポリシーベースの管理」、「データ操作監査」がある。これらはアクティブディレクトリのグループポリシーや、監査の仕掛けをSQL Serverに持ち込んだような機能だ。GUIベースで様々な制限の管理や監査を設定することができる。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;3つめの特徴は「サーバー統合シナリオへの対応」、4つめの特徴は「大規模データウエアハウスの実現」で、マルチインスタンスの管理やｍテーブルを複数のパーティションに分割するデータパーティション、データ圧縮、などの技術がある。とりわけデータ圧縮の技術は魅力的で、バックアップの際にも圧縮を行うことができ、圧縮計算にCPUを使っても結果的にI/O負荷が減るのでバックアップ時間を短縮することができるメリットがある。 &lt;/P&gt;
&lt;P&gt;5つめの特徴は「全社員向けBI基盤の提供」である。これを実現する大きなテクノロジが「Reporting Services」である。Reporting ServicesはSQL Server 2008で大きく改善され、他種類のグラフ作成やゲージなどを作ってリッチな表現の出力を得ることができる。またこれらのレポートを作るための新しい開発ツールが用意されている。またVirtual Earthとの統合、新しいデータ型「Geography」、「Geometry」と、距離や面積、重なり具合もTransact-SQLで取得できることが示された。この拡張は強力だ。 &lt;/P&gt;
&lt;P&gt;最後に機能強化されたReporting Serrviceを使ってレポートを作成する単体ツール「レポートビルダー2.0」についての説明とデモがあった。これはReporting Serviceのフォームを作る単体のツールで、この秋に提供されるSQL Server 2008のフューチャーパックに入れられる予定とのことだった。デモで見たレポートビルダーのインターフェースはまるでOffice 2007のようで、特徴的なリボンインターフェースを使ったものだった。またデータ接続の作成ウィザードはInfoPathのデータ接続ウィザードと似ていた。これは早く使ってみたい。&lt;/P&gt;
&lt;P&gt;またSQL Server 2008については、マイクロソフトのサイトに自習書が21本あがっているとこのことで、これもぜひダウンロードして使ってみたい。&lt;/P&gt;
&lt;P&gt;個人的には大規模環境を扱っていないので、ポリシーベースの管理やデータ操作監査、Virtual Earth統合、そして何よりもReporting Servicesの拡張に興味を持ったセッションだった。&lt;/P&gt;&lt;img src ="http://blogs.sqlpassj.org/hotikisu/aggbug/25491.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ホチキス先生</dc:creator><title>TechEd 2008 Yokohamaでライトニング・トークに出る</title><link>http://blogs.sqlpassj.org/hotikisu/archive/2008/08/06/25435.aspx</link><pubDate>Wed, 06 Aug 2008 21:38:00 GMT</pubDate><guid>http://blogs.sqlpassj.org/hotikisu/archive/2008/08/06/25435.aspx</guid><wfw:comment>http://blogs.sqlpassj.org/hotikisu/comments/25435.aspx</wfw:comment><comments>http://blogs.sqlpassj.org/hotikisu/archive/2008/08/06/25435.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.sqlpassj.org/hotikisu/comments/commentRss/25435.aspx</wfw:commentRss><trackback:ping>http://blogs.sqlpassj.org/hotikisu/services/trackbacks/25435.aspx</trackback:ping><description>&lt;P&gt;今年は昨年と少し趣向が変わったTechEdのコミュニティ・プログラム。「ライトニング・トーク」というプログラムで「簡単! InfoPath と SQL Server でリッチなインターフェイスのクライアント サーバー システム構築」という話をさせてもらえることになった。&lt;/P&gt;
&lt;P&gt;5分程度ということで詳しい説明はできないが、いま業務としてやっているデータベースについて話す。InfoPathをクライアントのフロントエンドに使い、データベースSQL Serverに接続するクライアント・サーバー・アプリケーションについてだ。&lt;/P&gt;
&lt;P&gt;俺はもともとプログラマーではなく、どちらかといえば管理運用の仕事をしている立場にいる。学校のデータベースを日常業務の空き時間を使って構築してきた経験から、実際の業務に直接携わっている人間、運用についてよく知っている人間がデータベースを構築することが、最も効率よく成功するシステムを構築できると確信している。&lt;/P&gt;
&lt;P&gt;マイクロソフトのSQL Server、InfoPathやAccessといったオフィス製品、Active Directoryなど使いやすいシステムを組み合わせて利用することで、たいていのデータベースは自前で構築できる。その可能性を実感してもらえれば嬉しい。&lt;/P&gt;
&lt;P&gt;マイクロソフトTeceED 2008 Yokohama公式サイト&lt;BR&gt;&lt;A href="http://www.microsoft.com/japan/teched/2008/default.mspx"&gt;http://www.microsoft.com/japan/teched/2008/default.mspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Birds of a Feather &amp;amp; ライトニング・トーク&lt;BR&gt;&lt;A href="http://www.event-marketing.jp/events/te08/special/bof.htm"&gt;http://www.event-marketing.jp/events/te08/special/bof.htm&lt;/A&gt;&lt;/P&gt;&lt;img src ="http://blogs.sqlpassj.org/hotikisu/aggbug/25435.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ホチキス先生</dc:creator><title>基本情報に関して変更履歴を記録する必要があるデータの処理でトリガを使えばわかりやすい。</title><link>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/30/25288.aspx</link><pubDate>Mon, 30 Jun 2008 21:13:00 GMT</pubDate><guid>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/30/25288.aspx</guid><wfw:comment>http://blogs.sqlpassj.org/hotikisu/comments/25288.aspx</wfw:comment><comments>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/30/25288.aspx#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://blogs.sqlpassj.org/hotikisu/comments/commentRss/25288.aspx</wfw:commentRss><trackback:ping>http://blogs.sqlpassj.org/hotikisu/services/trackbacks/25288.aspx</trackback:ping><description>&lt;P&gt;生徒の基本情報の中には、入学してから卒業まで全く変更のないフィールドがある。それは「性別」「生年月日」「入学年月日」などである。これらのデータは「生徒基本情報」テーブルに一つのフィールドを設けて登録すればいい。&lt;/P&gt;
&lt;P&gt;これに対し「住所」などは転居によって変更しなければならないデータである。また「保護者」なども場合によっては変更があるし、生徒本人の「姓」、あるいは昨今「名」すら変更したいというケースがまれにある。戸籍の氏変更にともなって姓の変更は当然にしても、「名」さえ変更があり得るとすれば、履歴をきちんと管理しておかないと、そもそもその生徒がいったい誰だったのかわからなくなってしまう。&lt;/P&gt;
&lt;P&gt;これら変更履歴を記録しなければならないデータについては次のような管理が考えられる。&lt;/P&gt;
&lt;P&gt;（１）別テーブルで管理する&lt;/P&gt;
&lt;P&gt;「生徒」テーブル　[学籍番号],[住所管理番号]&lt;BR&gt;「住所」テーブル　[学籍番号],[住所管理番号],[住所]&lt;/P&gt;
&lt;P&gt;というように「住所」だけを記録するテーブルをつくり、最新の「住所管理番号」を「生徒」テーブルの「住所管理番号」フィールドに記録して関連づける。「住所」テーブルを「学籍番号」でクエリをかければ、その生徒の住所変更履歴がわかる。&lt;/P&gt;
&lt;P&gt;（２）住所履歴を別テーブルにするが、トリガで「生徒」テーブルに変更を反映させる&lt;/P&gt;
&lt;P&gt;「生徒」テーブル　[学籍番号],[住所]&lt;BR&gt;「住所変更」テーブル　[住所管理番号],[学籍番号],[住所]→Insertトリガで「住所」を「生徒」テーブルへ記録&lt;/P&gt;
&lt;P&gt;「生徒」テーブルに直接「住所」を記録できるようにし、住所変更があれば「住所変更」テーブルに記録する。そのときInsertトリガによって「生徒」テーブルに住所を記録するようにする。住所変更の履歴は「住所変更」テーブルに「学籍番号」でクエリを行えばわかる。&lt;/P&gt;
&lt;P&gt;教科書的には（１）の処理が正しいと思うが、住所というような基本データは、さまざまなビューで使うことになるので、別テーブルにした場合、常にテーブル間の連携を意識しなければならない。どうしてもビューが複雑になる。（２）の方法では「住所」データが重複することになるが、「生徒」テーブルには常に最新の住所が入っていることになり、他のビューを作るときにわかりやすい。&lt;/P&gt;&lt;img src ="http://blogs.sqlpassj.org/hotikisu/aggbug/25288.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ホチキス先生</dc:creator><title>InfoPathの弱いところ。複数ページの印刷処理。</title><link>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/29/25281.aspx</link><pubDate>Sun, 29 Jun 2008 17:21:00 GMT</pubDate><guid>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/29/25281.aspx</guid><wfw:comment>http://blogs.sqlpassj.org/hotikisu/comments/25281.aspx</wfw:comment><comments>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/29/25281.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.sqlpassj.org/hotikisu/comments/commentRss/25281.aspx</wfw:commentRss><trackback:ping>http://blogs.sqlpassj.org/hotikisu/services/trackbacks/25281.aspx</trackback:ping><description>&lt;P&gt;InfoPathをSQL Serverに接続してクライアント・サーバーシステムにしている。InfoPathの弱いところは印刷だが、特に複数ページわたる印刷物を作成したいときに、改行の自由度が小さいところだ。&lt;/P&gt;
&lt;P&gt;データベースに生徒データと講座データ、それを関連付ける受講データがある。ここから各生徒の時間割個票を出力したい。このときInfoPathならクエリフィールドの学籍番号を使って、一人の生徒の時間割個票を出力するのは簡単だ。しかし担任が自分のクラスの生徒の時間割個票をまとめて印刷したい、というような場合がある。&lt;/P&gt;
&lt;P&gt;Accessなら接続先のデータのうち「学籍番号」を「グループヘッダー」にして「改ページ」しておけば、自動的に一人ずつの時間割個票がまとめて印刷処理できる。InfoPathでもこのようなグループ処理ができればいいのだが。&lt;/P&gt;&lt;img src ="http://blogs.sqlpassj.org/hotikisu/aggbug/25281.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ホチキス先生</dc:creator><title>SQL ServerとAccessによるクライアントサーバーシステムの事例はあるのか</title><link>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/28/25279.aspx</link><pubDate>Sat, 28 Jun 2008 12:41:00 GMT</pubDate><guid>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/28/25279.aspx</guid><wfw:comment>http://blogs.sqlpassj.org/hotikisu/comments/25279.aspx</wfw:comment><comments>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/28/25279.aspx#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://blogs.sqlpassj.org/hotikisu/comments/commentRss/25279.aspx</wfw:commentRss><trackback:ping>http://blogs.sqlpassj.org/hotikisu/services/trackbacks/25279.aspx</trackback:ping><description>&lt;P&gt;InfoPathをクライアントにして、SQL Serverデータベースシステムを作っている。InfoPathはデータの入出力には得意だが、印刷の自由度が小さい。そこでクライアントにAccessを使い、アクセスプロジェクトでSQL Serverに接続することも併用している。&lt;/P&gt;
&lt;P&gt;いろいろとやってみると、これが結構便利だ。Accessのレポートで表を作ることも面倒だが、Accessはよく使っていて慣れているので、手際よく作るコツはわかっている。&lt;/P&gt;
&lt;P&gt;もしかしたらSQL ServerとAccessだけでクライアントサーバーシステムを構築する事例もあるのではないか、と思うようになってきた。ちょっと調べてみると、Microsoftや@ITなどの記事はあるが、具体的な事例を書いたページは見当たらない。実際にやってみると工夫のしがいもあるので、またここに書いていきたい。&lt;/P&gt;
&lt;P&gt;Microsoft Office Online 「Access プロジェクトについて (ADP)」&lt;BR&gt;&lt;A href="http://office.microsoft.com/ja-jp/access/HP052731031041.aspx"&gt;http://office.microsoft.com/ja-jp/access/HP052731031041.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;@IT「データベース・サーバのフロントエンドとしてAccessを利用する」&lt;A href="http://www.atmarkit.co.jp/fwin2k/win2ktips/346dbaccess/dbaccess.html"&gt;&lt;BR&gt;http://www.atmarkit.co.jp/fwin2k/win2ktips/346dbaccess/dbaccess.html&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;@IT 「AccessをMSDEのフロントエンドとして利用する」&lt;A href="http://www.atmarkit.co.jp/fwin2k/win2ktips/404accessmsde/accessmsde.html"&gt;http://www.atmarkit.co.jp/fwin2k/win2ktips/404accessmsde/accessmsde.html&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Microsoft Office Online 「アクセスプロジェクト」&lt;BR&gt;&lt;A href="http://office.microsoft.com/ja-jp/access/CH062526761041.aspx"&gt;http://office.microsoft.com/ja-jp/access/CH062526761041.aspx&lt;/A&gt;&lt;/P&gt;&lt;img src ="http://blogs.sqlpassj.org/hotikisu/aggbug/25279.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ホチキス先生</dc:creator><title>InfoPath2003とSQL Server2000の組み合わせでバグかもしれない現象に遭遇した。その２</title><link>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/26/25269.aspx</link><pubDate>Thu, 26 Jun 2008 11:47:00 GMT</pubDate><guid>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/26/25269.aspx</guid><wfw:comment>http://blogs.sqlpassj.org/hotikisu/comments/25269.aspx</wfw:comment><comments>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/26/25269.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.sqlpassj.org/hotikisu/comments/commentRss/25269.aspx</wfw:commentRss><trackback:ping>http://blogs.sqlpassj.org/hotikisu/services/trackbacks/25269.aspx</trackback:ping><description>&lt;P&gt;&lt;SPAN lang=EN-US&gt;また似たようなエラーが出るようになった。今回は順調に稼動していたマシンで、あるときからInfoPathが使えなくなった。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;データは「従事時間調査」というものを行うもので、単にひとつのテーブルだけがデータ接続になっている。テーブル構造の概要は次のとおり。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;[職員番号],[氏名],[月],[日],[従事時間]・・・&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;フォームは「月」でクエリを行い、一月ごとの従事時間入力を行うようにしている。ここである教員が、4月や6月のデータは読み出せるのだが、5月のデータを読み出そうとすると「一部の動作規則を適用できませんでした」というメッセージが出てエラーになる。詳細は以下のとおり。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;----------------------------------------------------------------------------&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;「一部の動作規則を適用できませんでした」&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;ドキュメント オブジェクトの query メソッドに失敗しました。&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;指定されたクエリを実行できません。&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;ファイルは有効な XML ドキュメントではありません。&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;無効な文字で名前が始まりました。&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;行 197、位置 3&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;/&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;--^&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN lang=EN-US&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;----------------------------------------------------------------------------&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;「一部の動作規則を適用できませんでした」というメッセージがおかしい。フォーム上、何も動作規則を設定していないのだが。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;以前におこった現象については、以下に記述している。&lt;BR&gt;&lt;A href="http://blogs.sqlpassj.org/hotikisu/archive/2007/01/16/20444.aspx"&gt;http://blogs.sqlpassj.org/hotikisu/archive/2007/01/16/20444.aspx&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;img src ="http://blogs.sqlpassj.org/hotikisu/aggbug/25269.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ホチキス先生</dc:creator><title>セカンダリデータ接続で必要なデータだけを取得するには（SQL Serverにサブクエリのビューを作る）</title><link>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/12/25019.aspx</link><pubDate>Thu, 12 Jun 2008 22:40:00 GMT</pubDate><guid>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/12/25019.aspx</guid><wfw:comment>http://blogs.sqlpassj.org/hotikisu/comments/25019.aspx</wfw:comment><comments>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/12/25019.aspx#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://blogs.sqlpassj.org/hotikisu/comments/commentRss/25019.aspx</wfw:commentRss><trackback:ping>http://blogs.sqlpassj.org/hotikisu/services/trackbacks/25019.aspx</trackback:ping><description>&lt;P&gt;InfoPathのセカンダリデータ接続でサブクエリーを書いてデータを絞り込む手法を紹介した。&lt;/P&gt;
&lt;P&gt;InfoPathでSQL Serverから自分の氏名を取得するには（データ接続にサブクエリーを書く）&lt;BR&gt;&lt;A href="http://blogs.sqlpassj.org/hotikisu/archive/2008/06/12/25016.aspx"&gt;http://blogs.sqlpassj.org/hotikisu/archive/2008/06/12/25016.aspx&lt;/A&gt;&lt;BR&gt;セカンダリデータ接続で必要なデータだけを取得するには（データ接続にサブクエリーを書く）&lt;A href="http://blogs.sqlpassj.org/hotikisu/archive/2008/06/12/25018.aspx"&gt;http://blogs.sqlpassj.org/hotikisu/archive/2008/06/12/25018.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;このサブクエリーを書く方法は、SQL Serverにビューを作ってもできる。次のようなテーブルがSQL Serverにあるとする。&lt;/P&gt;
&lt;P&gt;　　生徒（学籍番号,生徒氏名,担任ユーザーID）&lt;/P&gt;
&lt;P&gt;このとき、次のようなビューをSQL Serverに作る&lt;/P&gt;
&lt;P&gt;　　select 学籍番号 from dbo.生徒 where ('（ドメイン名）' + 担任ユーザーID = (select suser_sname() as Expr 1))&lt;/P&gt;
&lt;P&gt;もし担任ユーザーIDにドメイン名も含んだユーザーデータを作っておくなら次のようでいい&lt;/P&gt;
&lt;P&gt;　　select 学籍番号 from dbo.生徒 where 担任ユーザーID = (select suser_sname() as Expr 1)&lt;/P&gt;
&lt;P&gt;このビューに対してInfoPathでセカンダリデータ接続を作る。つまり、SQL Serverに書かれたビューも、それを呼び出すアクティブディレクトリユーザー名に対してsuser_sname()関数が正しく実行されるのだ。&lt;/P&gt;&lt;img src ="http://blogs.sqlpassj.org/hotikisu/aggbug/25019.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ホチキス先生</dc:creator><title>セカンダリデータ接続で必要なデータだけを取得するには（データ接続にサブクエリーを書く）</title><link>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/12/25018.aspx</link><pubDate>Thu, 12 Jun 2008 22:28:00 GMT</pubDate><guid>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/12/25018.aspx</guid><wfw:comment>http://blogs.sqlpassj.org/hotikisu/comments/25018.aspx</wfw:comment><comments>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/12/25018.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.sqlpassj.org/hotikisu/comments/commentRss/25018.aspx</wfw:commentRss><trackback:ping>http://blogs.sqlpassj.org/hotikisu/services/trackbacks/25018.aspx</trackback:ping><description>&lt;P&gt;InfoPathではメイン接続以外にセカンダリデータ接続を作ることができ、でデータを取得することができ、セカンダリデータ接続で取得したリストをフォームのドロップダウンリストボックスなどで選択要素として利用できる。これはとても便利だ。しかしセカンダリデータ接続では動的にクエリを行ってデータを選択することができないため、対象のテーブルの全部のデータを取得するしかない。このときに問題となるのが、ある程度のデータ量を超えたとき、フォームの実行速度が極端に低下することだ。フリーズしたのではないか、と思うほどパフォーマンスが低下する。これはぜひ後のバージョンでは解決してもらいたいが、現状では次のようなサブクエリを使って、動的にクエリを行う工夫ができる。&lt;/P&gt;
&lt;P&gt;たとえば生徒40人のクラスが30学級あれば、全校生徒のデータは120人になる。このうち自分の担任するクラスのリストだけをセカンダリデータ接続で取得したいときには、次のようにする。&lt;/P&gt;
&lt;P&gt;（１）次のテーブルを作る&lt;BR&gt;　　生徒（学籍番号,生徒氏名,担任ユーザーID）&lt;BR&gt;（２）InfoPathでデータ接続ウィザードを実行し、SQL文を次のように書き換える&lt;BR&gt;　　　select "生徒氏名" from "dbo"."生徒" as "生徒" where '（ドメイン名）' + 担任ユーザーID = (select suser_sname())&lt;/P&gt;
&lt;P&gt;つまりSQL Serverから自分のアクティブディレクトリユーザー名を取得するsuser_sname()関数を利用してサブクエリーを書き、生徒テーブルから自分のクラスの生徒データだけを取得するのだ。&lt;/P&gt;
&lt;P&gt;このとき、テーブルの担任ユーザーIDにドメイン名も含めてデータを登録しているなら次のようでいい&lt;/P&gt;
&lt;P&gt;　　　select "生徒氏名" from "dbo"."生徒" as "生徒" where 担任ユーザーID = (select suser_sname())&lt;/P&gt;
&lt;P&gt;ここでは学校のクラスで担任が自分のクラスの生徒名をリストとして取得する例を説明したが、一般企業でも社員の中から自分が所属する支店の社員情報だけのリストを取得したい、といった事例が考えられるだろう。&lt;/P&gt;&lt;img src ="http://blogs.sqlpassj.org/hotikisu/aggbug/25018.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ホチキス先生</dc:creator><title>InfoPathでSQL Serverから自分の氏名を取得するには（データ接続にサブクエリーを書く）</title><link>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/12/25016.aspx</link><pubDate>Thu, 12 Jun 2008 22:11:00 GMT</pubDate><guid>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/12/25016.aspx</guid><wfw:comment>http://blogs.sqlpassj.org/hotikisu/comments/25016.aspx</wfw:comment><comments>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/12/25016.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.sqlpassj.org/hotikisu/comments/commentRss/25016.aspx</wfw:commentRss><trackback:ping>http://blogs.sqlpassj.org/hotikisu/services/trackbacks/25016.aspx</trackback:ping><description>&lt;P&gt;以前、InfoPathのデータ接続でSQL Serverからアクティブディレクトリのユーザー名を取得する方法を書いた。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.sqlpassj.org/hotikisu/articles/16073.aspx"&gt;http://blogs.sqlpassj.org/hotikisu/articles/16073.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;ここで使ったsuser_sname()関数を使って、InfoPathでSQL Serverから自分の氏名を取得するデータ接続を作ってみた。方法は次のとおり。&lt;/P&gt;
&lt;P&gt;（１）SQL Serverに次のようなユーザー情報のテーブルを作っておく&lt;BR&gt;　　ユーザー（ログオンID,ユーザー氏名）&lt;BR&gt;（２）InfoPathでデータ接続を作る&lt;BR&gt;（３）ウィザードで適当なテーブルを選択し、SQLの編集を行う&lt;BR&gt;（４）SQL文を次のように書き換える&lt;/P&gt;
&lt;P&gt;select "ユーザー氏名" from "dbo"."ユーザー" as "ユーザー" where '（ドメイン名\）' +&amp;nbsp;ログオンID = (select suser_sname())&lt;/P&gt;
&lt;P&gt;もしユーザーテーブルのログオンIDにドメイン名も含んだデータを格納しているなら、次のようでいい。&lt;/P&gt;
&lt;P&gt;select "ユーザー氏名" from "dbo"."ユーザー" as "ユーザー" where&amp;nbsp;ログオンID = (select suser_sname())&lt;/P&gt;
&lt;P&gt;&amp;nbsp;つまりInfoPathのデータ接続にサブクエリを書くだけでいいのだ。この手法は応用がきくだろう。&lt;/P&gt;&lt;img src ="http://blogs.sqlpassj.org/hotikisu/aggbug/25016.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>