SQL Serverで使用可能な2つのメタデータ関数には、DB_NAME()
が含まれます。 およびORIGINAL_DB_NAME()
。どちらの関数も、データベースの名前を返すという点で似ています。しかし、それらも異なります。目的が異なるため、この2つを混同しないでください。
一言で言えば、各機能は次のように機能します。
-
DB_NAME()
指定されたデータベースの名前を返します。データベースを明示的に指定しない場合は、現在のデータベースが返されます。 -
ORIGINAL_DB_NAME()
データベース接続文字列でユーザーが指定したデータベース名を返します。
例1-初期接続
次の接続文字列について考えてみます。
mssql-cli -S localhost -U sa -P bigStrongPassword!!! -d WideWorldImporters
これは、 mssql-cliを使用するときに提供した接続文字列です。 SQLServerに接続するためのコマンドラインツール。
この接続文字列には、-d WideWorldImporters
が含まれます 、これは、WideWorldImportersデータベースが初期データベースになることを意味します。 SQL Serverに接続すると、現在のデータベースはWideWorldImportersになります。
上記の接続文字列を使用してログインした後、両方の関数を実行すると、次のようになります。
SELECT DB_NAME() AS [Current Database], ORIGINAL_DB_NAME() AS [Original Database], DB_NAME(5) AS [Another Database];
結果:
+--------------------+---------------------+--------------------+ | Current Database | Original Database | Another Database | |--------------------+---------------------+--------------------| | WideWorldImporters | WideWorldImporters | MyDB | +--------------------+---------------------+--------------------+
例2–データベースの切り替え
別のデータベースに切り替えてステートメントを再度実行すると、次のようになります。
USE Music; SELECT DB_NAME() AS [Current Database], ORIGINAL_DB_NAME() AS [Original Database], DB_NAME(5) AS [Another Database];
結果:
+--------------------+---------------------+--------------------+ | Current Database | Original Database | Another Database | |--------------------+---------------------+--------------------| | Music | WideWorldImporters | MyDB | +--------------------+---------------------+--------------------+
現在のデータベースは変更されますが、元のデータベースは同じままです。同じデータベースID(5
)を指定したため、3番目の列も同じままです。 )DB_NAME()
を呼び出す場合 。
例3–デフォルトのデータベース
接続文字列でデータベースを明示的に指定しないと、次のようになります。
mssql-cli -S localhost -U sa -P bigStrongPassword!!!
次に、ORIGINAL_DB_NAME()
を実行します :
SELECT DB_NAME() AS [Current Database], ORIGINAL_DB_NAME() AS [Original Database], DB_NAME(5) AS [Another Database];
結果:
+--------------------+---------------------+--------------------+ | Current Database | Original Database | Another Database | |--------------------+---------------------+--------------------| | master | master | MyDB | +--------------------+---------------------+--------------------+
そのユーザーのデフォルトデータベースが使用されます。この場合はマスターデータベースです。