Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách ORIGINAL_DB_NAME () hoạt động trong SQL Server

Trong SQL Server, bạn có thể sử dụng ORIGINAL_DB_NAME() hàm để trả về tên cơ sở dữ liệu được chỉ định bởi người dùng trong chuỗi kết nối cơ sở dữ liệu.

Không nên nhầm lẫn chức năng này với DB_NAME() , trả về cơ sở dữ liệu cụ thể hoặc cơ sở dữ liệu hiện tại.

Khi bạn lần đầu tiên tạo kết nối với SQL Server, bạn có tùy chọn chỉ định cơ sở dữ liệu ban đầu. Ví dụ:khi sử dụng giao diện dòng lệnh như sqlcmd , bạn có thể sử dụng -d tham số để chỉ định cơ sở dữ liệu ban đầu. Nếu bạn không sử dụng tham số này, cơ sở dữ liệu mặc định của thông tin đăng nhập của bạn sẽ là cơ sở dữ liệu ban đầu.

Sau khi kết nối, bạn có thể chuyển sang một cơ sở dữ liệu khác, nhưng cơ sở dữ liệu ban đầu của bạn sẽ luôn giống nhau. Nói cách khác, ORIGINAL_DB_NAME() sẽ luôn trả về cùng một cơ sở dữ liệu trong suốt phiên của bạn, ngay cả khi bạn chuyển sang một cơ sở dữ liệu khác.

Ví dụ 1 - Cách sử dụng cơ bản

Đây là một ví dụ cơ bản.

SELECT ORIGINAL_DB_NAME() AS [Original Database];

Kết quả:

+---------------------+
| Original Database   |
|---------------------|
| master              |
+---------------------+

Ví dụ 2 - Các chuỗi kết nối khác nhau

Ví dụ này minh họa cách xuất của ORIGINAL_DB_NAME() chức năng được xác định bởi chuỗi kết nối.

Hãy xem xét chuỗi kết nối sau:

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

Ở đây, tôi sử dụng mssql-cli công cụ dòng lệnh để kết nối với SQL Server. Phần chúng tôi quan tâm là -d Music . Điều này chỉ định rằng cơ sở dữ liệu ban đầu phải là cơ sở dữ liệu Âm nhạc. Nói cách khác, khi tôi đã kết nối với SQL Server, cơ sở dữ liệu hiện tại của tôi sẽ là Âm nhạc.

Vì vậy, sau khi chạy mã đó (và kết nối thành công với SQL Server), tôi có thể chạy ORIGINAL_DB_NAME() :

SELECT ORIGINAL_DB_NAME() AS [Original Database];

Kết quả:

+---------------------+
| Original Database   |
|---------------------|
| Music               |
+---------------------+

Bây giờ, hãy mở một kết nối khác, nhưng lần này tôi sẽ chỉ định một cơ sở dữ liệu khác:

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

Bây giờ hãy chạy ORIGINAL_DB_NAME() :

SELECT ORIGINAL_DB_NAME() AS [Original Database];

Kết quả:

+---------------------+
| Original Database   |
|---------------------|
| WideWorldImporters  |
+---------------------+

Ví dụ 3 - Chuyển đổi cơ sở dữ liệu

Đây là những gì sẽ xảy ra nếu tôi chuyển sang một cơ sở dữ liệu khác và chạy lại câu lệnh:

USE Music;
SELECT ORIGINAL_DB_NAME() AS [Original Database];

Kết quả:

Changed database context to 'Music'.
+---------------------+
| Original Database   |
|---------------------|
| WideWorldImporters  |
+---------------------+
(1 row affected)

Cơ sở dữ liệu ban đầu vẫn được giữ nguyên.

Đây là một lần nữa khi so sánh với DB_NAME() chức năng:

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

Kết quả:

Changed database context to 'Music'.
+--------------------+---------------------+
| Current Database   | Original Database   |
|--------------------+---------------------|
| Music              | WideWorldImporters  |
+--------------------+---------------------+
(1 row affected)

Ví dụ 4 - Cơ sở dữ liệu mặc định

Đây là những gì sẽ xảy ra nếu tôi không chỉ định rõ ràng cơ sở dữ liệu trong chuỗi kết nối:

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

Bây giờ hãy chạy ORIGINAL_DB_NAME() :

SELECT ORIGINAL_DB_NAME() AS [Original Database];

Kết quả:

+---------------------+
| Original Database   |
|---------------------|
| master              |
+---------------------+

Trong trường hợp này, cơ sở dữ liệu mặc định cho người dùng đó được sử dụng.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách đọc hàng cuối cùng với SQL Server

  2. Bộ xử lý Intel được đề xuất cho SQL Server 2014 - tháng 3 năm 2015

  3. Mọi thứ bạn nên biết về SQL Server JOINS

  4. Stuff và 'For Xml Path' hoạt động như thế nào trong SQL Server?

  5. Làm thế nào để xóa (ngăn chặn SQL injection) động SQL trong SQL Server?