Trong SQL Server, bạn có thể sử dụng FILE_IDEX()
chức năng trả về ID của một tệp cơ sở dữ liệu nhất định.
Để thực hiện việc này, hãy chuyển tên tệp logic của tệp cơ sở dữ liệu vào hàm. Đây là tên tương ứng với name
trong sys.master_files
chế độ xem danh mục hoặc sys.database_files
xem danh mục. Các chế độ xem đó cũng chứa ID tệp, nhưng FILE_NAME()
giúp bạn không phải truy vấn các chế độ xem đó.
Ví dụ 1 - Cách sử dụng cơ bản
Dưới đây là một ví dụ nhanh để chứng minh.
USE WideWorldImportersDW; SELECT FILE_IDEX('WWI_Primary') AS Result;
Kết quả:
+----------+ | Result | |----------| | 1 | +----------+
Ví dụ 2 - Thêm tệp
Đây là một ví dụ khác, lần này trả về ba tệp.
USE WideWorldImportersDW; SELECT FILE_IDEX('WWI_Primary') AS WWI_Primary, FILE_IDEX('WWI_Log') AS WWI_Log, FILE_IDEX('WWI_UserData') AS WWI_UserData;
Kết quả:
+-------------+----------+--------------+ | File 1 | File 2 | File 3 | |-------------+----------+--------------| | WWI_Primary | WWI_Log | WWI_UserData | +-------------+----------+--------------+
Ví dụ 3 - Cơ sở dữ liệu khác nhau
Trong ví dụ này, tôi chuyển sang một cơ sở dữ liệu khác, sau đó chạy lại truy vấn.
USE Music; SELECT FILE_IDEX('Music') AS Music, FILE_IDEX('Music_Log') AS Music_Log, FILE_IDEX('Music_UserData') AS Music_UserData;
Kết quả:
+---------+-------------+------------------+ | Music | Music_Log | Music_UserData | |---------+-------------+------------------| | 1 | 2 | NULL | +---------+-------------+------------------+
Các tên tệp khác nhau đối với cơ sở dữ liệu này. Ngoài ra, về cột thứ ba, không có tệp nào có tên đó, vì vậy chúng tôi nhận được kết quả NULL.
Ví dụ 4 - Sử dụng sys.database_files
Như đã đề cập, FILE_IDEX()
hàm giúp bạn không phải truy vấn sys.database_files
hoặc sys.master_files
lượt xem. Nếu chúng tôi không có FILE_IDEX()
chức năng, chúng tôi phải làm một cái gì đó như sau:
USE WideWorldImportersDW; SELECT file_id FROM sys.database_files WHERE name = 'WWI_Primary';
Kết quả:
+-----------+ | file_id | |-----------| | 1 | +-----------+
Ví dụ 5 - Sử dụng sys.master_files
Đây là một truy vấn tương tự cho sys.master_files
:
SELECT file_id FROM sys.master_files WHERE name = 'WWI_Primary' AND database_id = DB_ID();
Kết quả:
+-----------+ | file_id | |-----------| | 1 | +-----------+
Dạng xem này là dạng xem toàn hệ thống và nó có thể trả về dữ liệu từ tất cả các cơ sở dữ liệu. Do đó, tôi thêm cơ sở dữ liệu hiện tại (bằng cách sử dụng DB_ID()
) vào WHERE
của truy vấn mệnh đề.