2013-12-01から1ヶ月間の記事一覧

実行プランを グラフィカルに見たい

今から実行するクエリの実行プランが欲しい - お だ のスペース で実行プランを取りました。 SSMS(SQL Server Management Studio) だと図で見れますが、実行プランは単なる XML です。 自前のアプリで似たような感じに出来ないかなーということで探してみま…

今から実行するクエリの実行プランが欲しい

SSMS(SQL Server Management Studio) や SQL Database の管理ポータルなんかでは、 クエリを実行する時に一緒に実行プランも取得出来ます。 これを自前でやりたい場合は、SET SHOWPLAN_XML (Transact-SQL) を使います。 サンプルをもとに早速 SSMS から試し…

Groovy の Canonical アノテーションっぽいのを Xtend で

@Data が使えたら楽なんですが mutable な物の場合 @Data が使えません。とりあえず equals, hashCode, toString を追加したいなーという時用の Active Annotation 書いてみました。 適当なので、commons-lang に思いっきり依存してます。 import java.lang.…

Xtend の dispatch メソッド

元ネタ:Visitorパターンについて考えた — 裏紙 Xtend なら dispatch という構文 が追加されているので Groovy 位簡単に書けます。 interface Node{} @Data class NumNode implements Node { int value } @Data class AddNode implements Node { Node right …

1/25(土) SQLWorld★大阪#20 開催します

来年 1/25(土) に SqlWorld :: SQLWorld★大阪#20 を開催します。 【日時】 2014年1月25日(土曜日) 13:00:~18:00 ※途中からの参加でもOKです 【イベント概要】 2014年最初の SQLWorld 開催します!今回は色々な DB のお話しを予定しています。Oracle、MySQ…

SQL Server 2014 の日本語ドキュメント

SQL Server Advent Calendar 25日目 です。 やっと最終日まで来ました。最終日は最新の SQL Server 2014 の日本語ドキュメント/ブログの紹介をします。 SQL Server 2014 は今のところ CTP2 が公開されており、製品版はきっと来年に出るのではと思います。 公…

過去に紹介した T-SQL

SQL Server Advent Calendar 24日目 です。 今回は、このブログで過去に取り上げた便利なやつをまとめてみました。 それぞれもう一度書けばいいのでしょうが、同じのを何回も書くのは気分的にアレだったのでまとめだけです。 GROUP BY で小計や総計を取得す…

集計関数の小ネタ

SQL Server Advent Calendar 23日目 です。 今日は集計関数の小ネタです。 集計関数 (Transact-SQL) Null を無視する 大体の集計関数は、Null を無視します。Null でも含めるのは、count(*) 位かな? こんなテーブルとデータがあった時に create table [成績…

VIEW の実行プラン

SQL Server Advent Calendar 22日目 です。 今日は VIEW の実行プランのお話しです。 正規化された ER があった時に、マスタとくっつけて名称も取りたいというのはよくあると思います。 そこで、単純に全部くっつけた VIEW を作ります。 create view [V_受注…

SSMS(SQL Server Management Studio) で実行プランを取る

SQL Server Advent Calendar 21日目 です。 今さらな感もありますが、SSMS 初心者の方の目に留まればと思います。 実行プランは、推定実行プランと実際の実行プランを取る事が出来ます。 推定実行プラン 推定実行プランは、クエリを動かさずにプランだけ取得…

SQL Server 2014 の新機能が使えるエディション

SQL Server Advent Calendar 20日目 です。 まだ CTP2 なので変更があるかもしれませんが、各機能が使用出来るエディションが公開されています。 SQL Server 2014 の各エディションがサポートする機能 インメモリOLTP(Hekaton)、CCI(クラスター化カラムスト…

SSMS で長い文字列定数を折り返す

SQL Server Advent Calendar 19日目 です。 ネタが切れてきています。。 SSMS で文字列を折り返したい場合は、「\」を入れて改行します。 select 'abc\ def\ ghi' -- abcdefghi

IIF

SQL Server Advent Calendar 18日目 です。 ここ何日か SQL Server 2012 で追加された関数を紹介していたので、その流れで IIF の紹介を。 IIF (Transact-SQL) select iif( 1 = 1, 'YES', 'NO') -- YES select iif( 1 <> 1, 'YES', 'NO') -- NO これは CASE …

月末日を取得する

SQL Server Advent Calendar 17日目 です。 今日は、月末日(月の最終日)を取得します。 よくあるのは、翌月1日の日付型から、-1日するやり方でしょうか。 DATEADD (Transact-SQL) declare @today datetime = getdate() select dateadd(day, -1, convert(date…

年、月、日 から日付型に変換する

SQL Server Advent Calendar 16日目 です。 年、月、日と数値で持っている時に、日付型に変換する方法を紹介します。 基本は、CAST および CONVERT (Transact-SQL) です。 select convert(datetime, '20131216', 112) -- 2013/12/16 00:00:00.000 と変換出来…

LIKE でワイルドカード文字をエスケープ

SQL Server Advent Calendar 15日目 です。 今日は、LIKE のワイルドカード文字のエスケープについてです。 LIKE (Transact-SQL) [] で囲むことによってエスケープ出来ます。 例:備考に 30% という文字を含むデータを検索する。 select * from [受注] where…

文字列の結合

SQL Server Advent Calendar 14日目 です。 今日は文字列の結合です。 + (文字列連結) (Transact-SQL) 「+」を使って結合します。 select N'あいう' + N'えお' -- あいうえお Null が混じっていると Null になってしまうので、ISNULL (Transact-SQL) を使い…

IDENTITY 列に値を指定して INSERT する

SQL Server Advent Calendar 13日目 です。 普段は必要無いですが、たまに IDENTITY 列に明示的に値を指定して INSERT したくなる時があります。 そんな時は、 SET IDENTITY_INSERT (Transact-SQL) を使うことで、明示的に値を指定出来ます。 create table T…

INTO で作成したテーブルに IDENTITY 列を追加する

SQL Server Advent Calendar 12日目 です。 先日紹介した INTO を使用して IDENTITY の列を追加する方法です。 INTO を使った場合に、特定の条件を満たせば IDENTITY の列を引き継いでくれます。 しかし、元のテーブルに IDENTITY 列が無い場合や、特定の条…

SELECT した結果を新しいテーブルに挿入する

SQL Server Advent Calendar 11日目 です。 今日は、INTO 句 (Transact-SQL) のお話しです。 SELECT INTO を使うことで結果セットの定義通りのテーブルを作成し、データも入れることが出来ます。 select [受注].[受注日] , [受注].[取引先] , [受注明細].[商…

その時だけ使うワークテーブル

SQL Server Advent Calendar 10日目 です。 今日は、ある処理内で一時的に使うワークテーブルのお話しです。 一時テーブル SQL Server には、一時テーブルを作る機能があります。 CREATE TABLE (Transact-SQL) create table #テーブル名 ( id int, ... ) cre…

SSMS インテリセンスの更新

SQL Server Advent Calendar 9日目 です。 今日は SSMS(SQL Server Management Studio) のお話しです。 インテリセンス(入力補完)便利なんですが、新しく追加したテーブル等が出てきてくれない時があります。 その時は、メニュー => 編集 => IntelliSence =>…

UPDATE で 他のテーブルを使って更新したい

SQL Server Advent Calendar 8日目 です。 UPDATE で他のテーブルのデータを更新内容や条件に使う時の書き方です。 こんなテーブル定義で 2013/12/25 に出庫された内容を在庫に反映するクエリです。 update [在庫] set [数量] = [在庫].[数量] - [出庫].[数…

日付 => 文字列変換

SQL Server Advent Calendar 7日目 です。 今日は日付を文字列に変換します。有名なのは CAST および CONVERT (Transact-SQL) select convert(char, getdate(), 111) -- yyyy/MM/dd 形式で変換 ですね。SQL Server 2012 からは、 FORMAT (Transact-SQL) が追…

あるテーブルの列の一覧を取得する

SQL Server Advent Calendar 6日目 です。 今日は、列の一覧を取得します。 昨日紹介した sys.tables と sys.columns (Transact-SQL) を使いましょう。 select t.name , c.* from sys.tables t inner join sys.columns c on t.object_id = c.object_id where…

テーブルの一覧を取得する

SQL Server Advent Calendar 5日目 です。 今日はデータベースに存在するテーブルの一覧を取得します。 sys.tables (Transact-SQL) を使いましょう。 select * from sys.tables ちなみに Oracle では USER_TABLES ですね。 select * from user_tables

区切られた識別子

SQL Server Advent Calendar 4日目 です。 今日は「区切られた識別子」の紹介です。 データベース識別子 識別子の規則は、文字、記号 (_ @ #)、および数字を含む 1 ~ 128 個の文字で構成されます。(予約語を除く) この規則に反した記号を使ったり、予約語を…

文字列リテラル

SQL Server Advent Calendar 3日目 です。 今日は、文字列リテラル(定数) です。 定数 (Transact-SQL) 文字列定数 基本は、「'」(シングルクォート)で囲みます。 select 'abc' -- abc select 'あいうえお' -- あいうえお 文字列の途中に「'」がある場合は、…

GO

SQL Server Advent Calendar 2日目 です。 Go言語ではなく、GO (Transact-SQL) です。 GO はバッチの区切りを示します。 どうも T-SQL というよりは、クライアントツール依存のコマンドのようです。sqlcmd や SSMS(SQL Server Management Studio) 等からステ…

現在の日時を取得する

SQL Server の Advent Calendar が無さそうなので、とりあえず一人 Advent Calendar やってみることにします。 お題は、SQL Server といいつつ T-SQL メインです。 SQL Server/T-SQL Advent Calendar 1日目 です。 通常は GETDATE (Transact-SQL) CURRENT_TI…