Tôi đang cố gắng thu nhỏ một tệp cơ sở dữ liệu nhưng đang gặp lỗi.
Sử dụng file_id từ sys.database_files
các tác phẩm, nhưng sử dụng tên tệp logic sẽ gây ra lỗi.
Tên tệp logic giống nhau trong cả hai câu lệnh, vì vậy đó không phải là vấn đề. Ngoài ra, cơ sở dữ liệu đang được kết nối, là như nhau. Các công việc sau đây như mong đợi:
declare @fileId as int = (select file_id from sys.database_files where name = 'XY')
DBCC SHRINKFILE (@fileId, 0, TRUNCATEONLY)
Tuy nhiên ...
DBCC SHRINKFILE ('XY' , 0, TRUNCATEONLY)
... sẽ dẫn đến lỗi 8985:
Msg 8985, Cấp 16, Trạng thái 1, Dòng 1
Không thể định vị tệp 'XY' cho cơ sở dữ liệu '<cơ sở dữ liệu của tôi>' trong sys.database_files. Các tập tin hoặc không tồn tại, hoặc đã bị loại bỏ.
DECLARE @filename SYSNAME; SELECT @filename = name FROM sys.database_files ...);
và sau đó sử dụng @filename
trong đối số để DBCC
?
DBCC SHRINKFILE (XY, 0, TRUNCATEONLY)