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

Sử dụng FILE_IDEX () để trả lại ID của tệp cơ sở dữ liệu trong SQL Server

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 đề.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuyển đổi số nguyên thành hex và hex thành số nguyên

  2. pyodbc - tốc độ chèn hàng loạt rất chậm

  3. Cách đổi tên tên cột hoặc tên bảng trong SQL Server - Hướng dẫn SQL Server / T-SQL Phần 36

  4. Làm cách nào để tôi có thể chèn 10 triệu bản ghi trong thời gian ngắn nhất có thể?

  5. vấn đề với AttachDbFilename là gì