具有不同 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 文件