Transact-SQLは、T-SQLまたはTSQLと略されることが多く、MicrosoftおよびSybase独自のSQL拡張機能です。 Transact-SQLはSQL標準を拡張して、SQL標準に含まれていない追加機能を追加します。
簡単なT-SQLステートメントの例を次に示します。
CREATE DATABASE Movies;
これは、T-SQLの例で得られるのと同じくらい簡単です。これにより、Movies
という新しいデータベースが作成されます 。
ただし、T-SQLには、データベースファイルの配置場所、それらのファイルのサイズ、最大サイズなど、このステートメントに含める他のオプションが用意されています。
T-SQLの機能
T-SQLの機能には次のものがあります。
- 手続き型プログラミング
- ローカル変数
- 文字列処理、日付処理、数学などのさまざまなサポート機能
-
DELETE
への変更 およびUPDATE
ステートメント。特に、FROM句を追加して、結合を含めることができます。 - T-SQLには
BULK INSERT
があります データファイルをデータベーステーブルにインポートしたり、ユーザー指定の形式で表示したりできるステートメント。
上記の拡張機能の主な利点の1つは、T-SQLとSQLを使用する場合のプログラマビリティが大幅に向上することです。たとえば、ストアドプロシージャを使用すると、プログラミングロジックをデータベースに組み込むことができます。 1つ以上のパラメーターをストアード・プロシージャーに渡すことができ、ストアード・プロシージャーは、パラメーターの値に応じて変化する出力を返します。
T-SQLには、多数の組み込み関数が含まれているだけでなく、ユーザー定義関数もサポートされています。
組み込み関数の例
もう1つの基本的な例を次に示します。今回は、T-SQLの組み込み関数の1つを使用しています。
SELECT GETDATE();
結果:
2018-05-06 23:30:37.003
この場合、T-SQLのGETDATE()
を使用します 現在の日付と時刻を返す関数。これは、SELECT
と一緒に使用されます ステートメント。これは、データを返すための一般的なSQLステートメントです。
その関数を別の関数の引数として使用することもできます。次に例を示します:
SELECT FORMAT(GETDATE(), 'MMM');
結果:
May
この場合、T-SQL FORMAT()
を使用します 日付の月の部分だけを抽出し、特定の形式で表示する関数。その他の日付/時刻の例については、SQLServerで日付と時刻をフォーマットする方法を参照してください。
T-SQLの歴史
Transact-SQL(およびSQL Server)は最も一般的にMicrosoftのものとして知られていますが、実際には1987年に開始されたMicrosoftとSybaseのパートナーシップの結果です。このパートナーシップは1994年に解消されました。
その後、T-SQLは両社がリリースしたデータベース製品で引き続きサポートされていましたが、各企業は独自の方向でデータベース製品を開発しました。したがって、SybaseT-SQLとMicrosoftT-SQLにはいくつかの違いがあります。
T-SQLおよびGUIツール
Transact-SQLはSQLServerの中心です。 SQL Serverのほとんどの操作は、T-SQLを使用して実行されます。これは、GUIツール(SSMSやDBeaverなど)を使用していて、実際にプログラミングを行っていない場合でも当てはまります。アプリケーションを使用してSQLServerと対話するときはいつでも、アプリケーションはバックグラウンドでT-SQLを使用して、指定されたタスクを実行します。
ただし、Transact-SQLをサポートするデータベース管理システムはSQLServerだけではありません。 Microsoft Azure SQL Databaseは、T-SQLもサポートしています。アプリケーションが使用するほとんどのT-SQL機能は、MicrosoftSQLServerとAzureSQLDatabaseの両方で完全にサポートされています(ただし、いくつかの例外があります)。
GOコマンドについて
T-SQLを使用したことがある人なら、おそらくGO
に精通しているでしょう。 指図。このキーワードは、多くの場合、ステートメントのバッチの最後に配置されます。たとえば、上記の最初の例は次のように書くこともできます:
CREATE DATABASE Movies; GO
ただし、GO
コマンドは実際にはTransact-SQLの一部ではありません。実際、GO
コマンドは、Transact-SQLステートメントと同じ行を占めることさえできません。
GO
sqlcmdによって認識されるコマンドの1つです およびosql ユーティリティ、およびバッチとスクリプトの読みやすさと実行を容易にするSQL ServerManagementStudioコードエディタ。 GO
コマンドは、Transact-SQLステートメントのバッチの終了をSQLServerユーティリティに通知します。
SQLServerユーティリティはGO
を解釈します Transact-SQLステートメントの現在のバッチをSQLServerのインスタンスに送信する必要があることを示すシグナルとして。ステートメントの現在のバッチは、最後のGO
以降に入力されたすべてのステートメントで構成されます 、またはこれが最初のGO
の場合は、アドホックセッションまたはスクリプトの開始以降 。
その他の独自のSQL拡張機能
Transact-SQLは、SQL標準の唯一の拡張機能ではありません。さまざまなデータベースシステムには独自の拡張機能があります。たとえば、OracleはPL / SQLと呼ばれる独自の手続き型言語を使用し、PostgreSQLはPL/pgSQLと呼ばれる手続き型言語を使用します。
プロプライエタリSQL拡張機能には利点(拡張機能など)がありますが、欠点もあります。大きな欠点の1つは、あるシステムから別のシステムにデータベースを移植する必要がある場合に、問題が発生する可能性があることです。たとえば、組織がSQL Serverの代わりにOracleを使用することを突然決定した場合、すべてのSQL Serverコードを調べて、Oracle用に書き直す必要がある場合があります。これには、両方のシステムの構文を理解する必要もあります。