【问题标题】:SQL Server: How to SELECT the installation path?SQL Server:如何选择安装路径?
【发布时间】:2012-07-03 18:42:54
【问题描述】:

我知道有一个变量、函数或存储过程可用于查找 SQL Server 的安装路径:

例如:

c:\Program Files\Microsoft SQL Server\MSSQL.7\MSSQL

m:\CustomInstance\MSSQL

实际上,我希望选择默认备份路径。但由于我怀疑它的存在,我将把 \BACKUP 附加到安装路径上并称它足够接近。


更新一

select filename from sysaltfiles
where name = db_name()

Server: Msg 208, Level 16, State 1, Line 1
Invalid object name 'sysaltfiles'.

select filename from master.dbo.sysaltfiles
where name = db_name()

filename
---------------- 

(0 row(s) affected)

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    如何选择安装路径

    注意xp_instance_regread 不会读取您指定的注册表项,而是将该键路径转换为特定的适当路径您正在运行的 SQL Server 实例。换句话说:xp_regread 失败,而 xp_instance_regread 成功。

    SQL Server 安装目录

    declare @rc int, @dir nvarchar(4000) 
    
    exec @rc = master.dbo.xp_instance_regread
          N'HKEY_LOCAL_MACHINE',
          N'Software\Microsoft\MSSQLServer\Setup',
          N'SQLPath', 
          @dir output, 'no_output'
    select @dir AS InstallationDirectory
    

    SQL Server 备份目录

    declare @rc int, @dir nvarchar(4000) 
    
    exec @rc = master.dbo.xp_instance_regread
          N'HKEY_LOCAL_MACHINE',
          N'Software\Microsoft\MSSQLServer\MSSQLServer',
          N'BackupDirectory', 
          @dir output, 'no_output'
    select @dir AS BackupDirectory
    

    SQL Server 2000 Location Functions

    【讨论】:

    • 这太棒了。很好的问答。
    【解决方案2】:

    执行以下命令检查注册表以找到适当的键。

    Declare @Path as varchar(100);
    Set @Path = NULL
    
    Exec master..xp_regread 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Microsoft SQL Server\70\Tools\ClientSetup', 'SQLPath', @Path OUTPUT
    Select @Path as [Sql Server 7.0 path] 
    
    Set @Path = NULL
    Exec master..xp_regread 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Microsoft SQL Server\80\Tools\ClientSetup', 'SQLPath', @Path OUTPUT
    Select @Path as [Sql Server 2000 path] 
    
    Set @Path = NULL
    Exec master..xp_regread 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Microsoft SQL Server\90\Tools\ClientSetup', 'SQLPath', @Path OUTPUT
    Select @Path as [Sql Server 2005 path]
    
    Set @Path = NULL
    Exec master..xp_regread 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Microsoft SQL Server\100\Tools\ClientSetup', 'SQLPath', @Path OUTPUT
    Select @Path as [Sql Server KATMAI path]
    

    【讨论】:

    • 这需要知道您当前正在使用的 SQL Server 版本之一;并且多个可以在同一台机器上。
    • xp_instance_regread + SERVERPROPERTY('ProductVersion') 解决了这个问题
    • 原来它没有返回正确的东西:"c:\Program Files\Microsoft SQL Server\80\Tools" vs "c:\Program Files\Microsoft SQL Server\MSSQL.1\ MSSQL"
    【解决方案3】:

    运行时会发生什么

    select filename from sysaltfiles
    where name = db_name()
    

    如果您想查看 master 数据库所在的位置,请将 db_name() 更改为 'master'

    【讨论】:

    • 没有返回。将结果添加到 OP
    【解决方案4】:
    CREATE FUNCTION Fn_sqlservertoolsdir()
    returns NVARCHAR(4000)
    AS
      BEGIN
          DECLARE @rc  INT,
                  @dir NVARCHAR(4000),
                  @key NVARCHAR(4000)
    
          SET @key = N'Software\Microsoft\Microsoft SQL Server\' + Replace(Cast(Serverproperty('ProductVersion') AS CHAR(2)), '.', '') + '0' + '\Tools\ClientSetup'
    
          EXEC @rc = master.dbo.Xp_regread
            N'HKEY_LOCAL_MACHINE',
            @key,
            N'Path',
            @dir output,
            'no_output'
    
          RETURN @dir
      END
    

    【讨论】:

    • 你缺少“END”,所以我添加了它,格式化了代码,并为你把它放在了一个代码块中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多