Sql server 使用T-sql在Linux上获取sql server默认备份文件夹

Sql server 使用T-sql在Linux上获取sql server默认备份文件夹,sql-server,linux,tsql,sql-server-2017,sql-server-2019,Sql Server,Linux,Tsql,Sql Server 2017,Sql Server 2019,对于Windows上的SQL Server获取默认备份文件夹,我们可以使用master.dbo.xp\u instance\u regread: DECLARE@HkeyLocal nvarchar(18)=N'HKEY_LOCAL_MACHINE'; 声明@MSSqlServerRegPath nvarchar(31)=N'SOFTWARE\Microsoft\MSSQLServer'; 声明@InstanceRegPath sysname=@MSSqlServerRegPath+N'\MSS

对于Windows上的SQL Server获取默认备份文件夹,我们可以使用
master.dbo.xp\u instance\u regread

DECLARE@HkeyLocal nvarchar(18)=N'HKEY_LOCAL_MACHINE';
声明@MSSqlServerRegPath nvarchar(31)=N'SOFTWARE\Microsoft\MSSQLServer';
声明@InstanceRegPath sysname=@MSSqlServerRegPath+N'\MSSQLServer';
声明@BackupDirectory nvarchar(512)
如果1=isnull(将(SERVERPROPERTY('IsLocalDB')转换为位),则为0)
将@BackupDirectory=cast(SERVERPROPERTY('instancedefaultdatapath')设置为nvarchar(512))
其他的
EXEC master.dbo.xp_instance_regrad@HkeyLocal,@InstanceRegPath,N'BackupDirectory',@BackupDirectory OUTPUT;
选择@BackupDirectory作为SQLServerBackupDirectory;

但对于Linux来说,它不起作用。有谁能帮助我使用T-SQL方法(我只找到SSMS解决方案)?

我从来没有找到一种非注册表的方法来可靠地在T-SQL中获取备份目录。我通常只替换/data/to/backup/,因为在默认安装时,它与数据目录的关系是明确的。这并不能直接回答您的问题,但如果您在安装过程中没有进行单独的目录自定义,这是一种可行的方法

-- for one of my databases, [dharma] in my linux test-bed.
declare @bkup nvarchar(1024)
set @bkup = replace(cast(SERVERPROPERTY('instancedefaultdatapath') as nvarchar(512)),'/data/','/backup/') + 'dharma.bak'
backup database dharma to disk = @bkup

在SQL Server v2019中,Microsoft增强了ServerProperty以公开InstanceDefaultBackupPath。这里也谈到了同样的问题()

谢谢你的建议,等待正确的备选方案(默认备份文件夹可以随时更改)几天,如果运气不好,我会批准你的回答。我更改了RHEL克隆上的默认备份目录,它将新值存储在/var/opt/mssql/mssql.conf中,而不是像我希望的那样存储在master或msdb中。希望在某个时候,他们更新注册表存储的进程,从*nix配置文件中提取值。他们目前甚至不允许您在SSMS中更改它。只有贝壳。