使用vbscript获取选定实例的SQL Server数据库文件夹

使用vbscript获取选定实例的SQL Server数据库文件夹

问题描述:

假设您有一个名为(本地)\ SQLEXPRESS的正在运行的SQL Server Express实例。它的数据库文件夹是c:\ program files \ Microsoft SQL Server \ MSSQL.1 \ MSSQL \ Data。使用vbscript获取选定实例的SQL Server数据库文件夹

如何的VBScript来检索文件夹?

也许使用SMO?如果是这样,怎么样? < - 忘记了。 SMO使用.NET。只能在PowerShell中使用。


更新: 这样做的原因是,我正在开发使用用于连接MDF文件到现有的SQL Server实例自定义操作(调用一个基于.NET程序集)的MSI安装程序。为此,.mdf文件将从安装媒体传输到硬盘驱动器。所以安装程序需要知道在哪里放置文件。

因为我想支持的标准,我需要将文件放置到公共数据文件夹。


更新: 当选择InstallShield中的SQL Server实例,该物业_ _ SQLSERVER服务器设置与实例名称。

我发现,我可以在HKLM \ Software \ Microsoft \ Microsoft SQL Server \ Instance Names \ SQL下查询注册表以获取实例名称的SQL名称(例如SQLEXPRESS - > MSSQL.1)。

有了这些信息,我可以查询HKLM \ SOFTWARE \微软\ Microsoft SQL Server的\ MSSQL.1 \ SETUP检索SQLDataRoot关键。当我将\ Data附加到在此处找到的值时,我找到了我正在查找的文件夹。

但是,有没有更好的方法?

SQL-DMOPrimaryFilePath Property看起来很有趣。

的MSDN指出,SQL-DMO是不赞成的SQL Server 2008,但现在它仍然应该工作。

如果你不想再使用SQL-DMO,我想WMI的root\Microsoft\SqlServer命名空间中可能会有一些可用的东西。但微软要么隐藏得很好,要么我的搜索技能已经离我而去,目前我无法在这方面找到任何东西。

(编辑:删除一些不回答这个问题。)

默认数据路径也存储在注册表中:

 
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\DefaultData 

我不知道其中为实例编写他们数据,但它必须位于逻辑附近的某处。

如果你说你为什么这样做可能会更容易。

SQL Server将让您可以将您的文件上的任何本地驱动器盘符(甚至大师,模型,MSDB和临时可移动),但在安装过程中有用于每个实例的默认文件夹。

由于我想支持这些标准,我需要将这些文件放入公用数据文件夹中。

如果我是安装软件的DBA,我宁愿不要将它们放在那个位置(通常位于C:驱动器上)。我更喜欢你问我在哪里安装它们,因为如果这些数据库的使用甚至是中等重要的,那么它们将在SAN驱动器上运行,我可以轻松扩展容量,并且我希望数据库和日志分散在不同的驱动器上(即而不是微软默认安装的方式),以及特别是在驱动器上的日志(,即不是C:),如果它填满了,我不会以任何方式渲染我的服务器无法工作。

使用此代码自定义操作,

strName = "(local)\SQLEXPRESS" 
arrNames = Split(strName, "\") 
intIndex = Ubound(arrNames) 
strFile = arrNames(intIndex) 
strFile = trim(strFile) 

if strFile <> "" then 
    reg = readFromRegistry("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\" & strFile & "\Setup\SQLPath", "") 
    reg = trim(reg) 
    if reg <> "" then 
     reg = reg & "\DATA" 
    end if 
end if 

msgbox reg 

function readFromRegistry (strRegistryKey, strDefault) 
    Dim WSHShell, value 

    On Error Resume Next 
    Set WSHShell = CreateObject("WScript.Shell") 
    value = WSHShell.RegRead(strRegistryKey) 

    if err.number <> 0 then 
     readFromRegistry= strDefault 
    else 
     readFromRegistry=value 
    end if 

    set WSHShell = nothing 
end function 

变量reg将检索路径。您可以在开始时在变量strName上给出实例名称。

注册功能来源:How to check for registry value using VbScript