日本最大級5000社以上のシステム開発・WEB制作会社・IT製品/サービス提供社が登録。IT専門だから細かい要望が伝わり、理想的なパートナーが見つかる。
こんにちは。SI部の安井と申します。 今回はSQL ServerのPIVOT句とUNPIVOT句を紹介します。 PIVOT・UNPIVOTは何をするものかというと、 [PIVOT] 行を列に変換 [UNPIVOT] 列を行に変換 というものです。 さっそく説明に移りたいと思います。 PIVOTの使い方 まずは、PIVOTの基本的な使い方からです。 PIVOT句の構文は下記のとおりです。 SELECT グループ化対象列の値1, グループ化対象列の値2, ・・・ FROM テーブル名 PIVOT ( 集計関数(集計対象列) FOR グループ化対象列 IN (グループ化対象列の値1, グループ化対象列の値2, ・・・) ) AS 別名 PIVOTを実行 それでは、実際に動かしてみましょう。 [商品名]と[売上金額]の2列からなる[売上」テーブルから、 [商品名]ごとのに列を作成し、[売上金額]の
テーブルの列を自動インクリメント列(自動採番列)に設定する手順を紹介します。 概要 SQL Serverでテーブルの指定した列を自動でインクリメントする設定にする場合は、その列にIDENTITYの設定をして、「IDである」を「はい」に設定します。 Microsoft SQL Server Management Studio で設定する場合 [Microsoft SQL Server Management Studio]を起動します。テーブルを新規作成する。もしくは、テーブルを選択し、右クリックしてポップアップメニューを表示し、メニューの[構造]をクリックします。 下図のテーブルデザイナが表示されます。 テーブルデザイナで、自動インクリメントしたい列を選択します。下部の[列のプロパティ]エリアの"IDENTITYの指定"の(IDである)が"いいえ"になっていますので、"はい"に変更します。
【概要】 bcpコマンドによりCSVのエクスポートを行える。 OracleのSQLローダのようなものである。 コマンドプロンプトからSQLServerに対し認証を行い、 任意のテーブル/クエリでimport/exportを行う。 これを敢えてストアドから実行するサンプルを示す。 【コード例】 ■テーブル情報を直接出力 DECLARE @CMD VARCHAR(1000); SET @CMD = ' bcp [dbo].[TABLEA] out C:\WK\TABLEA.csv -Usa -Pxxxxx -S MSSQLSERVER' EXECUTE master.dbo.xp_cmdshell @CMD ■クエリを実行してCSV出力 DECLARE @CMD VARCHAR(1000); --Windows認証の場合の例 SET @CMD = ' bcp "select * from ta
詳細設計を行うことで、プログラミングに必要な仕様を明確化することになります。必要な情報を漏れなく記載し、仕様バグをできるだけ取り除くことが必要です。 詳細設計では、内部設計で設計したシステムの各機能をより詳細化し、実際にどのような処理を行ってプログラムを動作させるかを決めていきます。プログラマは詳細設計書を元にプログラムを実装していくため、プログラマに分かりやすい表記で設計していくことが求められます。
TechEd 2009 での私のシアターセッション「SQL Server 動的管理ビュー再入門」で紹介した「プロシージャ キャッシュの中身」を参照できるスクリプトです。DMV(動的管理ビュー)の dm_exec_cached_plans と、動的管理関数(DMF)の dm_exec_query_plan、dm_exec_sql_text を利用しています。 SELECT text AS sqltext, query_plan AS 実行プラン, usecounts, * FROM sys.dm_exec_cached_plans CROSS APPLY sys.dm_exec_query_plan (plan_handle) CROSS APPLY sys.dm_exec_sql_text( plan_handle )
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance 指定した sql_handleによって識別される SQL バッチのテキストを返します。 このテーブル値関数は、システム関数の fn_get_sqlを置き換えます。 構文 sys.dm_exec_sql_text(sql_handle | plan_handle) 引数 sql_handle 実行中または現在実行中のバッチを一意に識別するトークンです。 sql_handle は varbinary(64)です。 sql_handleは、次の動的管理オブジェクトから取得できます。 sys.dm_exec_query_stats sys.dm_exec_requests sys.dm_exec_cursors sys.dm_exec_xml_handles sys.dm_
SQL でスリープ(sleep)させる たま~に、ストアドプロシジャー内で一定期間、スリープ(sleep)させたいような時ありませんか? C# で言えば、Thread.Sleep メソッドのような感じです。 ここでは、そんな時に使える、フロー制御言語をご紹介します。 フロー制御言語 - WAITFOR ストアードプロシジャー内などで、一定期間、実行をブロックさせたい時には、フロー制御言語の WAITFOR を使います。 例えば、5 秒間ブロックしたい時は、WAITFOR DELAY を使って以下のように指定します。 DELAY の後には、DateTime 型の時間の部分のみを指定します。 日付の部分まで含めると、エラーになってしまいます。 最大 24 時間まで指定することができます。 他にも、WAITFOR TIME を使うことによって、指定の時間まで、実行をブロックすることができます。
前回の「条件分岐のあるストアドプロシージャ」に引き続き、ストアドプロシージャの作成に挑戦します。今回は、前回のIF文による条件分岐から、WHILE文により繰り返し実行するSQL文を使用したストアドプロシージャを取り上げます。 では早速、例題を実行しながら、SQLの確認をしていきましょう。 誕生日の月ごとに従業員名を表示するストアドプロシージャ 今回は、従業員テーブル(Employees)に保存されている誕生日(BirthDate)を基に、誕生日月ごとの従業員リストを作成するストアドプロシージャを作成します。クエリアナライザから下記のSQLを実行し、SelectBirthdayByMonthというストアドプロシージャを作成してみましょう。
SQLServerでテーブル型を戻り値とする関数を作る SQLServerではINT型やVARCHAR型などを返す関数と同様にユーザー定義テーブル型を戻り値とする関数を作成できます。 テーブル型を戻り値とする関数は通常の関数と同様にCREATE FUNCTIONで作成します。 CREATE FUNCTION [dbo].[test_function] ( @param1 VARCHAR(MAX) ='' ,@param2 VARCHAR(MAX) ='' ) RETURNS @retTbl TABLE ( no INT ,name VARCHAR(20) ) BEGIN INSERT INTO @retTbl VALUES( 1, '太郎' ) ; INSERT INTO @retTbl VALUES( 2, '次郎' ) ; INSERT INTO @retTbl VALUES( 3,
SQLのパフォーマンスチューニング。 インデックスを貼ったり、 Group by、distinct、 副問い合わせ、in句、union、exists句、などなど、join、outer join を使ってテーブルの結合順序を制御したり、やるだけやって見ても、どうしても速くならなかった場合には、SQLの最後に OPTION (FORCE ORDER) を追加すると、うまく高速化が図れる場合があります。ただし、ある程度RDBMSに精通していて、効率の良いテーブル結合順序に配慮したSQL文であることが前提となるので、上級者向けだと思います。 FORCE ORDER は SQL SERVER で使うことができるクエリヒントで、テーブル結合順序をオプティマイザに委ねるのではなく、from 句に記述したとおりに強制的に結合させることができます。通常はオプティマイザの方が賢いということで頻繁に使用すること
RDBMSのボトルネックは99%ディスクI/Oにある。CPUや物理メモリに比べて、ハードディスクの速度はかなり遅い。気が遠くなるぐらい遅い。インデックスを効果的に設計すれば劇的にディスクI/Oコストを減らすことができる。 インデックスって何だ?まず簡単に基礎知識。インデックスには、クラスタ化インデックスと非クラスタ化インデックスがある。 大雑把に言えば、クラスタ化インデックスとはレコードデータ自体のディスク上での順序を表す。だから、テーブル毎に一つしか作れない。クラスタ化インデックスの順序が隣接しているという事は、データが物理的に隣接されてディスクに格納されているという事である。 SQL Serverは、データを「ページ」という概念で格納する。I/Oは全てこの8KBのページが最小単位である。レコードをたった一行取得する場合でもページ毎に読み出される。クラスタ化インデックスの順序が近いデータ
てっちゅーのお役立ち日記仕事、健康、家庭、教育、趣味、コンピューターなど 今日も何処かで誰かの役に立つ情報を不定期でアップしていく予定です。 クライアントPCからSQL Server2005のデータベースへ接続時に下記のエラーが発生、解決方法のメモ (指定した、サーバー名、認証、ログイン、パスワードが正しく設定されている。) 環境:SQL Server2005 エラーの内容 「サーバーとの接続を正常に確立しましたが、ログイン中にエラーが発生しました。(provider:名前付きパイププロバイダ,error:0-パイプの他端にプロセスがありません。)(Microsoft SQL Server、エラー:233)」 下記の手順でSQL Server2005の設定を変更 1、「スタート」->「すべてのプログラム」->「Microsoft SQL Server 2005」->「構成ツール」->「SQ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く