システム関数の使用

システム関数を使用すると、SQL Server システム テーブルの情報にアクセスできるので、システム テーブルに直接アクセスする必要がなくなります。

一部の Transact-SQL システム関数の名前は、2 つのアット マーク (@@) から始まります。SQL Server の以前のバージョンでは、@@ 関数はグローバル変数を指しますが、これらは変数ではなく、変数とは違った動作をします。@@ 関数はシステム関数であり、構文の用法は関数のルールに従います。

以下のシステム関数の各組は、データベース、ホスト、オブジェクト、ログイン、およびユーザーについて、ID が渡された場合は名前を返し、名前が渡された場合は ID を返します。

  • DB_ID と DB_NAME

  • HOST_ID と HOST_NAME

  • OBJECT_ID と OBJECT_NAME

  • SUSER_ID と SUSER_NAME (または SUSER_SID と SUSER_SNAME)

  • USER_ID と USER_NAME

たとえば、sysobjects テーブルの SELECT を実行しなくても、DB_ID 関数を使用してデータベースの ID 番号を取得できます。

次の例は、SQL Server 認証を使用してログインした現在のユーザーのユーザー名を取得する方法を示します。

SELECT SUSER_NAME();

次の関数も上記の関数に似ていますが相補的な組にはなっておらず、複数の入力パラメータをとります。

  • COL_LENGTH

    列に格納された文字列の長さではなく列そのものの長さを返します。特定の値に含まれる総文字数を取得するには DATALENGTH 関数を使用してください。

    次の例は、Employees テーブルにある LastName 列の長さとデータ長を返します。

    SELECT COL_LENGTH('Employees', 'LastName') AS Col_Length, 
       DATALENGTH(LastName) AS DataLength
    FROM Employees
    WHERE EmployeeID > 6;
    
  • COL_NAME

    列名を返します。

  • INDEX_COL

    インデックス列名を返します。

システム テーブルに直接クエリを実行することなくシステム情報を取得するには、システム関数、情報スキーマ ビュー、またはシステム ストアド プロシージャを使用することをお勧めします。システム テーブルは SQL Server のバージョンによって大きく異なることがあります。