SlideShare a Scribd company logo
SQL Database でも使える○×※△ 
2014/10/04 SQL Server 収穫祭 
JAZUG おだ
自己紹介 
織田信亮(おだしんすけ) 
大阪で開発者しています 
SQLWorld の代表です 
http://odashinsuke.hatenablog.com/ 
Twitter:@shinsukeoda
SQLWorld って? 
SQL Server を中心にDB の勉強会やってます 
正規化/モデリング, NoSQL とかもやってます 
SQL を書くハンズオンやってます 
平日夜開催(2H程度) 
提示されたお題に対して、SQL を書いてみる 
検索だけ(SELECT) 4, 5 問
DB インストールしてないとダメなの? 
DB のインストール必要無しです 
ブラウザがあれば参加出来ます 
やろうと思えば、オンラインでも可 
http://tsqlrunner.azurewebsites.net/
何回か開催していると 
問題が…
テーブル名が被ることが出てくる 
スキーマ(Schema) を分けることで解消 
クエリにスキーマ指定させるのイケてない 
select * from [20140805].[テーブル] 
開催回毎にユーザーを作成し「既定のス 
キーマ」を指定する 
アプリ側は同じクエリを投げても、ユー 
ザーによって見るテーブルが変わる
Sql database でも使えるほにゃらら
テーブル定義の取得 
T-SQL で取得します 
カタログビュー 
sys.~ 
情報スキーマビュー 
INFORMATION_SCHEMA.~ 
内部的にはカタログビュー使ってます 
やりやすい方を使えば良いです。
余計なことを 
させたくない!
自由にクエリを書けることの弊害 
DROP TABLE されたらどうするん? 
DDL 系の操作 
データの追加/変更/削除 
権限(やロール)の設定で対応 
GRANT SELECT / DENY ~ 
ロールの場合はdb_datareader やカスタ 
ム作成したロール
余計なことを 
させたくない! 
その2
リソースを食い尽くす嫌なやつ 
フロー制御言語を使った嫌がらせ 
WHILE 無限ループ 
WAITFOR 長時間ブロック 
CTE(共通テーブル式) を使った無限再帰 
クエリ 
SELECT なので権限云々では防げない 
例:今から毎日分の日付を延々と返すクエリ 
with [CTE] ( [日付] ) as ( 
select getdate() union all select dateadd(d, 1, [日付]) from [CTE] 
) 
select * from [CTE] option (maxrecursion 0)
SQL Server 側では難しそう…
ScriptDom 
.NET から使えるT-SQL のParser / 
Generator 
SQL Server Feature Pack からインス 
トール 
SQL Server 2008 位からあるようです 
2008 当時と2012/2014 では名前空間の 
構成が違うので注意
Parser/Generator 
各バージョン毎のParser/Generator 
80(2000)/90/100/110/120(2014) 
新しい構文は古いParser ではエラーになる 
Azure SQL Database 用はありません! 
Generator である程度は書式整形出来る
Parser を使って… 
複数バッチ/複文をNG 
SELECT でないとNG 
MAX RECURSION を指定してるとNG 
権限では防げないような物でも大体OK!
ScriptDom をどこで使うか 
ビルド時の.sql 検証 
構文エラー/規約違反 
クエリの書式統一 
クエリの動的生成 
使ってみたらわかるけど、結構面倒で非現 
実的…
おまけ 
SQL Database で対応しているか調べる 
Visitor を作ってましたが… 
ドキュメント(MSDN) と実環境とでちょい 
ちょい乖離が… 
進化のスピード早いし、ドキュメントが追 
い付かないのもしゃーない 
結局SQL Database で動かしてみないと判 
らん
Sql database でも使えるほにゃらら
どのクエリが良いのか比べたい! 
テーブルも多くて3個、データ数も2桁 
インデックスもクラスタ化(PK)のみ 
速度を比較しても… 
比較は難しい感 
あえて可読性くらい?
実行プラン出してみた 
実行プランはXML 
オプション指定すると、クエリで取れる 
SET SHOWPLAN_XML ON 
SET SHOWPLAN_XML ON 
GO 
select * from ~ 
GO 
SET SHOWPLAN_XML OFF
SqlCommand で投げる場合 
GO が使えない 
GO はT-SQL ではない 
SSMS/sqlcmd 等で認識されるコマンド 
Execute を分けて実行 
using (var conn = new SqlConnection(ConnStr)) 
using (var cmd = new SqlCommand(@"SET SHOWPLAN_XML ON", conn)) { 
conn.Open(); 
cmd.ExecuteNonQuery(); 
cmd.CommandText = "select * from [MemTable] where [Id] <= 100"; 
File.WriteAllText("Plan.sqlplan", cmd.ExecuteScalar() as string); 
}
Html-query-plan 
http://code.google.com/p/html-query-plan/ 
XML => XSLT 経由でHTML に変換 
JavaScript + CSS も使ってます 
サンプル通りの使い方でほぼOK 
C# 側はXslCompiledTransform でOK 
実行プランの線が表示されてないのは未調 
査。。
まとめ 
SQL Server/SQL Database には、 
普段あまり目にしない/使ってないものが 
まだまだあると思います。 
色々使って試してみましょう!

More Related Content

What's hot (20)

PDF
オンプレのDbaがazureのデータベースを使ってみた
Masayuki Ozawa
 
PDF
S08 Microsoft Azure SQL Server の活用 (IaaS 環境における設定や運用)
Microsoft Azure Japan
 
PDF
[C14] ソーシャル ゲーム基盤を支える SQL Server by Takashi Inaba
Insight Technology, Inc.
 
PDF
SQL Server/SQL Database の新機能のお話し
Insight Technology, Inc.
 
PPTX
Sql server 運用 101
Masayuki Ozawa
 
PPTX
2011/12/3 わんくま同盟
貴仁 大和屋
 
PPTX
2011/11/26 Dot netlab
貴仁 大和屋
 
PDF
Data consistency 入門 data partitioning ガイダンス
Masayuki Ozawa
 
PDF
db tech showcase 2019 SQL Database Hyperscale 徹底分析 - 最新アーキテクチャの特徴を理解する
Masayuki Ozawa
 
PDF
AzureでOracle
Kuniteru Asami
 
PPTX
Sql server2014復習とsqlserver2016の紹介
Oda Shinsuke
 
PDF
A25 sql server data page structure deep dive
Masayuki Ozawa
 
PDF
SQL Server 2014 データベースエンジン新機能
Masayuki Ozawa
 
PPTX
Sql azure知ってますか?改訂版
Oda Shinsuke
 
PDF
待ち事象から考える、Sql server の改善ポイント
Masayuki Ozawa
 
PPTX
Sql server 2014 新機能の紹介 改訂版
Oda Shinsuke
 
PPTX
Sql server sql database 最新機能紹介
Oda Shinsuke
 
PDF
Oracle と sql server 比べてみよう (sql server)
Masayuki Ozawa
 
PDF
SQL Server 2014 In Memory OLTP Overview
Masayuki Ozawa
 
PDF
S10 日本東西リージョンでのディザスタ リカバリ環境の実現
Microsoft Azure Japan
 
オンプレのDbaがazureのデータベースを使ってみた
Masayuki Ozawa
 
S08 Microsoft Azure SQL Server の活用 (IaaS 環境における設定や運用)
Microsoft Azure Japan
 
[C14] ソーシャル ゲーム基盤を支える SQL Server by Takashi Inaba
Insight Technology, Inc.
 
SQL Server/SQL Database の新機能のお話し
Insight Technology, Inc.
 
Sql server 運用 101
Masayuki Ozawa
 
2011/12/3 わんくま同盟
貴仁 大和屋
 
2011/11/26 Dot netlab
貴仁 大和屋
 
Data consistency 入門 data partitioning ガイダンス
Masayuki Ozawa
 
db tech showcase 2019 SQL Database Hyperscale 徹底分析 - 最新アーキテクチャの特徴を理解する
Masayuki Ozawa
 
AzureでOracle
Kuniteru Asami
 
Sql server2014復習とsqlserver2016の紹介
Oda Shinsuke
 
A25 sql server data page structure deep dive
Masayuki Ozawa
 
SQL Server 2014 データベースエンジン新機能
Masayuki Ozawa
 
Sql azure知ってますか?改訂版
Oda Shinsuke
 
待ち事象から考える、Sql server の改善ポイント
Masayuki Ozawa
 
Sql server 2014 新機能の紹介 改訂版
Oda Shinsuke
 
Sql server sql database 最新機能紹介
Oda Shinsuke
 
Oracle と sql server 比べてみよう (sql server)
Masayuki Ozawa
 
SQL Server 2014 In Memory OLTP Overview
Masayuki Ozawa
 
S10 日本東西リージョンでのディザスタ リカバリ環境の実現
Microsoft Azure Japan
 

Similar to Sql database でも使えるほにゃらら (20)

PPTX
Sql world を支える技術
Oda Shinsuke
 
PPTX
T sql の parse と generator
Oda Shinsuke
 
PPTX
T sql 振り返り
Oda Shinsuke
 
PPTX
開発者の方向けの Sql server(db) t sql 振り返り
Oda Shinsuke
 
PDF
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
歩 柴田
 
PPT
SQLチューニング勉強会資料
Shinnosuke Akita
 
PPTX
Db seminar 20190619
SAKURUG co.
 
PPTX
Sql learning2
Sadayoshi Ikushima
 
PDF
まだ統計固定で消耗してるの? - Bind Peek をもっと使おうぜ! 2015 Edition -
歩 柴田
 
PDF
C13 SQL Server2012知られざるTips集 by 平山理
Insight Technology, Inc.
 
PPT
今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップ
Toru Miyahara
 
PPTX
V$SQLとその周辺でER図を描いてみよう!
歩 柴田
 
PPTX
[LT] T sql の parse と generator
Oda Shinsuke
 
PPTX
Sql learning
Sadayoshi Ikushima
 
PDF
An overview of query optimization in relational systems 論文紹介
Kumazaki Hiroki
 
ODP
SQLを書こう
nakajima_yuji
 
PDF
データサイエンス勉強会(SQL)
Arisa Ishimura
 
PDF
データベースをAI開発に活用
ReNom User Group
 
PDF
2018年度 若手技術者向け講座 実行計画
keki3
 
PPT
今年こそ始めたい!SQL超入門 MIRACLE Linux Meetup版 0620
Toru Miyahara
 
Sql world を支える技術
Oda Shinsuke
 
T sql の parse と generator
Oda Shinsuke
 
T sql 振り返り
Oda Shinsuke
 
開発者の方向けの Sql server(db) t sql 振り返り
Oda Shinsuke
 
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
歩 柴田
 
SQLチューニング勉強会資料
Shinnosuke Akita
 
Db seminar 20190619
SAKURUG co.
 
Sql learning2
Sadayoshi Ikushima
 
まだ統計固定で消耗してるの? - Bind Peek をもっと使おうぜ! 2015 Edition -
歩 柴田
 
C13 SQL Server2012知られざるTips集 by 平山理
Insight Technology, Inc.
 
今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップ
Toru Miyahara
 
V$SQLとその周辺でER図を描いてみよう!
歩 柴田
 
[LT] T sql の parse と generator
Oda Shinsuke
 
Sql learning
Sadayoshi Ikushima
 
An overview of query optimization in relational systems 論文紹介
Kumazaki Hiroki
 
SQLを書こう
nakajima_yuji
 
データサイエンス勉強会(SQL)
Arisa Ishimura
 
データベースをAI開発に活用
ReNom User Group
 
2018年度 若手技術者向け講座 実行計画
keki3
 
今年こそ始めたい!SQL超入門 MIRACLE Linux Meetup版 0620
Toru Miyahara
 
Ad

More from Oda Shinsuke (20)

PDF
SQL Server2022_PSPoptimization_pub.pdf
Oda Shinsuke
 
PDF
What's hyperscale
Oda Shinsuke
 
PDF
Dot net+sql server tips
Oda Shinsuke
 
PDF
Sql server 2019 ざっくり紹介
Oda Shinsuke
 
PDF
Spark on sql server?
Oda Shinsuke
 
PPTX
SQL Server のロック概要
Oda Shinsuke
 
PDF
Blazor 触ってみた
Oda Shinsuke
 
PDF
Linux + PHP でも SQL Server
Oda Shinsuke
 
PPTX
グラフデータベースの話し
Oda Shinsuke
 
PPTX
Sql server 2017 新機能のご紹介
Oda Shinsuke
 
PPTX
Sql server 2017 からはじめる graph データベース
Oda Shinsuke
 
PPTX
Transaction scopeまだダメ
Oda Shinsuke
 
PPTX
Sql serverと他dbの違いを押さえよう!
Oda Shinsuke
 
PPTX
2016年を振り返って
Oda Shinsuke
 
PPTX
Sql world とは
Oda Shinsuke
 
PPTX
Sql world とは
Oda Shinsuke
 
PPTX
Ms build 触ってみよう
Oda Shinsuke
 
PPTX
Selenium 触ってみよう
Oda Shinsuke
 
PPTX
Sql database のご紹介
Oda Shinsuke
 
PPTX
Sql world とは
Oda Shinsuke
 
SQL Server2022_PSPoptimization_pub.pdf
Oda Shinsuke
 
What's hyperscale
Oda Shinsuke
 
Dot net+sql server tips
Oda Shinsuke
 
Sql server 2019 ざっくり紹介
Oda Shinsuke
 
Spark on sql server?
Oda Shinsuke
 
SQL Server のロック概要
Oda Shinsuke
 
Blazor 触ってみた
Oda Shinsuke
 
Linux + PHP でも SQL Server
Oda Shinsuke
 
グラフデータベースの話し
Oda Shinsuke
 
Sql server 2017 新機能のご紹介
Oda Shinsuke
 
Sql server 2017 からはじめる graph データベース
Oda Shinsuke
 
Transaction scopeまだダメ
Oda Shinsuke
 
Sql serverと他dbの違いを押さえよう!
Oda Shinsuke
 
2016年を振り返って
Oda Shinsuke
 
Sql world とは
Oda Shinsuke
 
Sql world とは
Oda Shinsuke
 
Ms build 触ってみよう
Oda Shinsuke
 
Selenium 触ってみよう
Oda Shinsuke
 
Sql database のご紹介
Oda Shinsuke
 
Sql world とは
Oda Shinsuke
 
Ad

Recently uploaded (10)

PDF
20250630_aws_reinforce_2025_aws_sheild_network_security_director
uedayuki
 
PDF
プライバシ保護のためのインターネットアーキテクチャの進化 (2025-07-11)
Jun Kurihara
 
PDF
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
PDF
生成AIパネルトーク(Interop25Tokyo APPS JAPAN M1-07,M2-07 嶋ポジショントーク)
嶋 是一 (Yoshikazu SHIMA)
 
PDF
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログ
kataware
 
PDF
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
PDF
ABC2025S LT講演「世界の窓から Androidこんにちは2025」アプリ自動生成の将来?ロボティクスの夢再び?
嶋 是一 (Yoshikazu SHIMA)
 
PDF
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー SIG-Audioプレゼン資料_オーディオプラグイン開発_塩澤達矢.pdf
IGDA Japan SIG-Audio
 
PDF
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
20250630_aws_reinforce_2025_aws_sheild_network_security_director
uedayuki
 
プライバシ保護のためのインターネットアーキテクチャの進化 (2025-07-11)
Jun Kurihara
 
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
生成AIパネルトーク(Interop25Tokyo APPS JAPAN M1-07,M2-07 嶋ポジショントーク)
嶋 是一 (Yoshikazu SHIMA)
 
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログ
kataware
 
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
ABC2025S LT講演「世界の窓から Androidこんにちは2025」アプリ自動生成の将来?ロボティクスの夢再び?
嶋 是一 (Yoshikazu SHIMA)
 
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
SIG-AUDIO 2025 Vol.02 オンラインセミナー SIG-Audioプレゼン資料_オーディオプラグイン開発_塩澤達矢.pdf
IGDA Japan SIG-Audio
 
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 

Sql database でも使えるほにゃらら

Editor's Notes

  • #5: 動いてるのを見てみましょう。 ちょちょっとクエリを書いて実行。
  • #7: スキーマ:.NET でいう 名前空間 みたいな物という認識で OK です。 ログイン 作って Database にスキーマとユーザーを作成。ユーザーはログインとスキーマに紐付け。 ログイン は SQL Database なので SQL Server 認証 マルチテナント 等でも使われてるのかも知れませんね。 全テーブルに 会社コード 持つ or そもそも スキーマ 分ける
  • #9: スキーマ で絞り込んで テーブル定義 を取得しています。
  • #11: 権限を絞って対応してます。 DROP TABLE とかされると勉強会に支障をきたすので。 sa でアプリ運用しているところもあったりするんですかね? 権限は、スキーマやテーブル単位だけでなく列単位でも掛けれるので、特定の列のデータは見せたくないみたいなのもやろうと思えば可能。
  • #13: 通常の回答では出てこないような、嫌がらせをされる事も考える必要あり! maxrecursion 0 は危険! 通常 100回再帰で打ち切りの所を、ずっと再帰しててもええんやでという設定。
  • #15: 2008 では、Interface と Impl とで名前空間が分かれていたので、頑張れば 他ベンダーの SQL に対しての Parser/Generator も実装出来た。 Microsoft.Data.Schema.ScriptDom/Microsoft.Data.Schema.ScriptDom.Sql => Microsoft.SqlServer.TransactSql.ScriptDom 2012 からは、T-SQL 専用になりました。
  • #16: Generator はバージョン間の差が良く分からない。。 Parse&Generator のデモ
  • #18: ビルド時に ORDER BY チェックデモ クエリの生成は結構大変 http://odashinsuke.hatenablog.com/entry/20130224/1361714459 の記事最後見せる
  • #21: 参加者からの要望
  • #23: XML をとれましたが、そのまま表示しても普通読めません。 SSMS っぽく表示したいなー。MS製の物は無さそう
  • #24: 昔試してた時はちゃんと出てた。
  • #25: Dapper だったり、JDBC接続だったりは普通に SQL Database でも使えます。 (最新の JDBC Driver は JRE7 までがサポート対象) JDK7 や Java8 はサポート対象外。 開発者の視点として SQL Database で未サポートのもの ・一部の分析関数 (LAG とか) ・SQL CLR ・シーケンス ・メモリ最適化テーブル ・クエリ通知 ・データ変更の追跡 (Change Data Capture 変更データキャプチャ/Change Tracking 変更の追跡) ・TDE(Transparent Data Encryption 透過的データの暗号化)