-
Notifications
You must be signed in to change notification settings - Fork 0
MS_SQL
nishi_74322014 edited this page Aug 19, 2026
·
2 revisions
- 戻る(データアクセスのいろいろ)
- SQL
- ストアド プロシージャ / ADO.NET
SQL のトピック。
移行メモ(元ページの状態): 元ページは見出しと「再帰クエリ」への
リンクのみのスタブ ページである。
移行に際して、ページの位置付け(SQL に関するトピックの入口)を保ったまま、
索引として機能する程度の補記を追加した。
補足(SQL の分類): SQL は用途によって以下に分類される。
アプリケーション開発者が日常的に書くのは DML だが、
権限設計やマイグレーションでは DDL / DCL も扱う。
分類 正式名 主なステートメント DML Data Manipulation Language SELECT/INSERT/UPDATE/DELETE/MERGEDDL Data Definition Language CREATE/ALTER/DROP/TRUNCATEDCL Data Control Language GRANT/REVOKE/DENYTCL Transaction Control Language BEGIN TRAN/COMMIT/ROLLBACK/SAVE TRANなお、
TRUNCATE TABLEは DDL に分類されるが、
SQL Server ではトランザクション内でロールバック可能である。
補足(方言): SQL は ISO/ANSI で標準化されているが、
実装ごとの差(方言)が大きい。
クロスDB対応を意識する場合に問題になりやすいのは以下。
観点 SQL Server Oracle PostgreSQL 件数制限 TOP n/OFFSET-FETCHROWNUM/FETCH FIRSTLIMIT/OFFSET文字列連結 +/CONCAT||||空文字と NULL 区別する ''は NULL区別する パラメータ記法 @name:name$1/@name(Npgsql)識別子の引用 [name]"name""name"日付の現在値 GETDATE()/SYSDATETIME()SYSDATEnow()標準に寄せて書けば移植性は上がるが、
性能を出すには結局その DBMS 固有の書き方が要る、というのが実情である。
補足(アプリから SQL を書くときの原則):
- 必ずパラメータ化する。文字列連結は SQL インジェクションの原因になる
(ADO.NET、SQLプロファイラ(SQLトレース)を参照)。SELECT *を使わない。列を明示すると、
カバリング インデックスが効きやすくなり、スキーマ変更の影響も受けにくい
(SQL Server のインデックス)。- 列に関数を掛けない。
WHERE YEAR(d) = 2026は
インデックスが使われない(SARGable でない)。- 暗黙の型変換を避ける。パラメータの型を列に合わせる。
実行計画の読み方は実行プランのグラフィカル表示を参照。
- Transact-SQL リファレンス | Microsoft Learn
https://learn.microsoft.com/ja-jp/sql/t-sql/language-reference
Tags: 移行, データアクセス
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。