sql >> Databáze >  >> RDS >> Sqlserver

DB_NAME() vs ORIGINAL_DB_NAME() v SQL Server:Jaký je rozdíl?

Dvě z funkcí metadat dostupných na serveru SQL Server zahrnují DB_NAME() a ORIGINAL_DB_NAME() . Obě funkce jsou podobné v tom, že vracejí název databáze. Ale jsou také jiné. Rozhodně si je nechcete plést, protože slouží různým účelům.

Stručně řečeno, každá funkce funguje následovně:

  • DB_NAME() vrátí název zadané databáze. Pokud databázi explicitně neurčíte, vrátí aktuální databázi.
  • ORIGINAL_DB_NAME() vrátí název databáze zadaný uživatelem v řetězci připojení k databázi.

Příklad 1 – Počáteční připojení

Zvažte následující připojovací řetězec:

mssql-cli -S localhost -U sa -P bigStrongPassword!!! -d WideWorldImporters

Toto je připojovací řetězec, který jsem uvedl při použití mssql-cli nástroj příkazového řádku pro připojení k serveru SQL.

Tento připojovací řetězec obsahuje -d WideWorldImporters , což znamená, že databáze WideWorldImporters bude výchozí databází. Jakmile se připojím k SQL Serveru, moje aktuální databáze bude WideWorldImporters.

Zde je to, co dostanu, když spustím obě funkce po přihlášení pomocí výše uvedeného připojovacího řetězce:

SELECT 
  DB_NAME() AS [Current Database],
  ORIGINAL_DB_NAME() AS [Original Database],
  DB_NAME(5) AS [Another Database];

Výsledek:

+--------------------+---------------------+--------------------+
| Current Database   | Original Database   | Another Database   |
|--------------------+---------------------+--------------------|
| WideWorldImporters | WideWorldImporters  | MyDB               |
+--------------------+---------------------+--------------------+

Příklad 2 – Přepnutí databází

Když přepnu na jinou databázi a znovu spustím příkaz, stane se toto:

USE Music;
SELECT 
  DB_NAME() AS [Current Database],
  ORIGINAL_DB_NAME() AS [Original Database],
  DB_NAME(5) AS [Another Database];

Výsledek:

+--------------------+---------------------+--------------------+
| Current Database   | Original Database   | Another Database   |
|--------------------+---------------------+--------------------|
| Music              | WideWorldImporters  | MyDB               |
+--------------------+---------------------+--------------------+

Aktuální databáze se změní, ale původní databáze zůstane stejná. Třetí sloupec také zůstává stejný, protože jsem zadal stejné ID databáze (5 ) při volání DB_NAME() .

Příklad 3 – Výchozí databáze

Co se stane, pokud v připojovacím řetězci explicitně neurčím databázi:

mssql-cli -S localhost -U sa -P bigStrongPassword!!!

Nyní spusťte ORIGINAL_DB_NAME() :

SELECT 
  DB_NAME() AS [Current Database],
  ORIGINAL_DB_NAME() AS [Original Database],
  DB_NAME(5) AS [Another Database];

Výsledek:

+--------------------+---------------------+--------------------+
| Current Database   | Original Database   | Another Database   |
|--------------------+---------------------+--------------------|
| master             | master              | MyDB               |
+--------------------+---------------------+--------------------+

Použije se výchozí databáze pro daného uživatele, což je v tomto případě hlavní databáze.


  1. Proaktivní monitorování MySQL (Developer Studio/Advisors Angle)

  2. Pochopení uváznutí v MySQL a PostgreSQL

  3. vyberte count(*) z tabulky mysql v php

  4. SQLite vyberte řádky, pokud časové razítko odpovídá dnešnímu datu