使用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-DMO的PrimaryFilePath 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
上给出实例名称。