获取任何数据库的物理文件路径

Abs*_*Abs 9 t-sql sql-server sql-server-2005

我试图从任何数据库获取没有文件名的路径.到目前为止我有这个:

declare @db_name varchar (50)

SELECT @db_name = physical_name FROM sys.master_files WHERE database_id = DB_ID(N'master') AND type_desc = 'ROWS'

set @db_name = REVERSE(RIGHT(REVERSE(@db_name),(LEN(@db_name)-CHARINDEX('\', REVERSE(@db_name),1))+1))

print @db_name
Run Code Online (Sandbox Code Playgroud)

当我检查我的普通数据库但是当我在master数据库上尝试它时,它可以工作.我明白了:

C:\ Program Files\Microsoft SQL Server \

但是,正确的路径是:

C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\
Run Code Online (Sandbox Code Playgroud)

为什么错过了剩下的路径?

谢谢大家帮忙吗?

Mar*_*ith 9

您的变量数据类型太小.

C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\ 是72个字符.

尝试 declare @db_name varchar (200)