具有不同 SQL Server 版本的 SQL Server 主文件名

Posted

技术标签:

【中文标题】具有不同 SQL Server 版本的 SQL Server 主文件名【英文标题】:SQL Server Primary Filename with different versions of SQL Server 【发布时间】:2017-04-03 22:49:30 【问题描述】:

我正在处理一个团队项目,我们中的许多人没有相同版本的 SQL Server(一个人运行 SQL Server 2014,另一个人运行 SQL Server 2012 Express)。在 DB 脚本中,我们的主文件名和日志文件名的路径是不同的,因为我们在 SQL Server 上有不同的版本。

一个主要是(SQL Server 2012):

(NAME = N'Database_Name', 
 FILENAME = N'c:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\Datebase_Name.mdf',
 SIZE =...)

另一个可能是(SQL Server 2014):

(NAME = N'Database_Name', 
 FILENAME = N'c:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\Datebase_Name.mdf', 
 SIZE = ...)

有没有办法使文件名动态化,以便它根据安装的 SQL Server 版本自动识别它应该去的路径?尽量不要根据最后编辑脚本的人来重复更改文件名。

【问题讨论】:

需要更多信息。为什么要运行数据库创建脚本?为什么不只创建一次,每次都引用数据库逻辑名呢?此外,您没有理由不能全部在 C:\temp 中创建数据库。它没有必须进入那个文件夹。您可以在脚本中以各种方式使用变量。您可以使用动态 SQL,也可以使用 SQLCMD 模式变量。但我怀疑你正在解决一个你不需要的问题。 正如其他人所指出的:这确实引出了一个问题,为什么数据库连接创建静态脚本?大多数情况下,数据库连接字符串来自可以独立维护的配置文件(不编译) 【参考方案1】:

您可以使用以下代码使数据文件的路径动态化。这仅在您使用默认文件位置时才有效。如果有人决定将 db 文件放在不同的位置,这将不起作用。

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 实例的安装目录。 DB 文件的默认位置在此目录的 DATA 文件夹中。

但我必须强调,在共享环境中工作可能会更好,或者至少让您的环境保持同步。

马吕斯

【讨论】:

【参考方案2】:

我不知道考虑到你的开发环境和项目开发要求是否可行,但在很多情况下,一群开发人员在同一个项目上工作:

为他们的项目提供一致的开发环境 和/或使用共享数据库进行开发

【讨论】:

【参考方案3】:

感谢您提供有关使用开发环境的建议。我知道这是最好的,但在这种情况下是不可行的。更多研究为这种情况找到了替代解决方案。

ALTER DATABASE [Datebase_Name] MODIFY FILE
( NAME = N'Datebase_Name', SIZE = 5184KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
GO

ALTER DATABASE [Datebase_Name] MODIFY FILE
( NAME = N'Datebase_Name_log', SIZE = 832KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO

【讨论】:

我很好奇上述如何解决您提出的问题。 显然它对数据文件没有影响 我从主数据库中删除了文件名,并在创建数据库之前添加了这个文件名。上面的替代答案不起作用并反复提到使用共享环境,而问题没有询问如何在共享环境中执行此操作。不管负面 cmets 是什么,上面的代码都适用于使用不同版本的 SQL Server 跨多个设备的项目。

以上是关于具有不同 SQL Server 版本的 SQL Server 主文件名的主要内容,如果未能解决你的问题,请参考以下文章

TransactionScope:具有不同数据库连接的嵌套事务(SQL Server 和 Postgresql)

具有存储过程支持的 MS(正在进行?)嵌入式(无服务器)SQL Server 版本的名称是啥?

无法从具有多个 SQL Server 版本的 SQL Server 读取 Excel 文件

sqlserver支持的字符集都有哪些

s-s-rS:解析来自具有 XML 列的 SQL Server 查询的结果

SQL Server:具有不同长度的分析窗口函数