【问题标题】:Creating Database - How can I find out the Default Data Directory?创建数据库 - 如何找到默认数据目录?
【发布时间】:2012-07-22 05:20:56
【问题描述】:

我希望能够使用我找到的代码HERE 在我的 C# WinForm 应用程序中创建一个数据库。

但我需要找到一种方法来获取该特定 SQL Server 实例的默认数据目录。我想知道是否有一种简单的方法可以在各种版本的 SQL Server 上使用。

提前致谢。


编辑

我发现以下 Select 将返回远程服务器上的默认数据目录:

SELECT 
    SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
FROM master.sys.master_files 
WHERE database_id = 1 
    AND file_id = 1

此解决方案仅适用于 SQL Server 2005+。

**

【问题讨论】:

  • 你真的需要知道默认数据目录吗?创建后是否需要对数据库进行物理访问?
  • 我正在通过管道将 Create Database SQL 发送到远程服务器,其中两个要求是 MDF 和 LDF 文件的位置:msdn.microsoft.com/en-us/library/ms176061.aspx
  • 如果您不指定文件路径(例如CREATE DATABASE test),文件将进入默认配置位置 - 无需明确说明它们应该放在哪里,除非您希望它们放在其他地方.
  • 嗯,我没有意识到这一点。我确实找到了一个将返回默认路径的 Select 查询。我将更新我的原始帖子。
  • 我仍然不确定您为什么需要该目录。您在上面输入的查询将找到 master 数据库所在的目录,而不是默认数据目录(例如,如果它自 master 创建以来已配置)。您可以只创建一个数据库而不指定位置以使其转到默认位置。如果您仍然需要该位置,请先创建数据库,然后获取其位置。

标签: c# sql-server create-table


【解决方案1】:

这适用于 SQL 2000+

SELECT SUBSTRING(filename, 1, CHARINDEX(N'master.mdf', LOWER(filename)) - 1)
FROM master.dbo.sysdatabases
WHERE name = 'master'

【讨论】:

    【解决方案2】:

    您可以在服务器属性 - 数据库设置 - 数据库默认位置找到它。 如果需要,您可以使用 SQL Server Profiler 找出 sql 查询(取决于服务器版本)。

    【讨论】:

      【解决方案3】:

      Here 是 Alex Aza 提出的更好的解决方案。
      解决办法是:

      using (var connection = new SqlConnection("Data Source=.;Integrated Security=SSPI"))
      {
          var serverConnection = new ServerConnection(connection);
          var server = new Server(serverConnection);
          var defaultDataPath = string.IsNullOrEmpty(server.Settings.DefaultFile) ? server.MasterDBPath : server.Settings.DefaultFile;
          var defaultLogPath = string.IsNullOrEmpty(server.Settings.DefaultLog) ? server.MasterDBLogPath : server.Settings.DefaultLog;
      }
      

      需要引用 Microsoft.SqlServer.Smo.dll 和 Microsoft.SqlServer.ConnectionInfo.dll。可以在文件夹 C:\Program Files\Microsoft SQL Server\110\SDK\Assemblies 中找到这些 dll。它们与 SQL 安装一起分发。

      【讨论】:

        【解决方案4】:

        也许这会对你有所帮助:

        DECLARE @regvalue varchar(100)
        
        EXEC master.dbo.xp_regread @rootkey='HKEY_LOCAL_MACHINE',
                @key='SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11.MSSQLServer\Setup',
                @value_name='SQLDataRoot',
                @value=@regvalue OUTPUT,
                @output = 'no_output'
        
        SELECT @regvalue as DataAndLogFilePath
        

        这个存储过程需要一个参数,其中声明的SQL版本,即。 ...\MSSQL.11.MSSQLSERVER\...

        【讨论】:

          猜你喜欢
          • 2018-01-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-21
          • 2018-01-14
          • 2012-02-13
          • 1970-01-01
          • 2021-07-12
          相关资源
          最近更新 更多