SQL 具有不同版本 SQL 服务器的服务器主文件名

SQL Server Primary Filename with different versions of SQL Server

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

一个主要是 (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 服务器版本自动识别应该进入的路径?尽量不要根据最后编辑脚本的人重复更改文件名。

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

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

您可以使用以下代码使数据文件的路径动态化。这仅在您使用默认文件位置时才有效。如果有人决定将 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

查询returns你的SQL服务器实例的安装目录。 DB 文件的默认位置在此目录中的 DATA 文件夹中。

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

马吕斯

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

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