Assume that you have a running SQL Server Express instance named (local)\SQLEXPRESS. Its database folder is c:\program files\Microsoft SQL Server\MSSQL.1\MSSQL\Data.
How can VBScript be used to retrieve that folder?
Maybe by using SMO? And if so, how? <- Forget that. SMO uses .NET. Only possible in PowerShell.
Update: The reason for this is, that I am developing an MSI setup that uses a custom action (call to a .NET based assembly) for attaching mdf Files to an existing SQL server instance. for this, the .mdf files get transferred from the installation medium to the hard drive. So the setup needs to know where to place the files.
Since I would like to support the standards, I need to place the files into the common data folder.
Update: When selecting a SQL server instance in InstallShield, the Property IS _ SQLSERVER _ SERVER is set with the instance name.
I found out, that I can query the registry under HKLM\Software\Microsoft\Microsoft SQL Server\Instance Names\SQL to get the SQL name for the instance name (e.g. SQLEXPRESS -> MSSQL.1).
With this information, I can query HKLM\Software\Microsoft\Microsoft SQL Server\MSSQL.1\Setup to retrieve the SQLDataRoot key. When I append a \Data to the value found here, I have the folder, I was looking for.
However, is there a better way?
The PrimaryFilePath Property of SQL-DMO looks interesting.
The MSDN states that SQL-DMO is deprecated as of SQL Server 2008, but for now it should still be working.
If you don’t want to use SQL-DMO anymore, I guess there might be something usable in the
root\Microsoft\SqlServernamespace of WMI. But Microsoft has either hidden it very well or my search skills have left me, at the moment I cant find anything in this regard.(EDIT: Removed something that did not answer the question.)
The default data path is also stored in the registry:
I’m not sure where instances write their data, but it must be somewhere in the logical vicinity.