gpt4 book ai didi

sql-server - 如何命名数据库的文件名并在 Visual Studio 2015 数据库项目中设置其位置?

转载 作者:行者123 更新时间:2023-12-04 02:17:00 24 4
gpt4 key购买 nike

通过在 VS 2015 数据库项目的上下文菜单中选择“发布”,我可以创建一个脚本,其中包含将数据库部署到 SQL Server(“xyz.publish.sql”)的所有必要命令。

此脚本中的数据库名称及其路径声明为变量:

:setvar DatabaseName "myDatabase"
:setvar DefaultFilePrefix "myDatabase"
:setvar DefaultDataPath "D:\Databases\"
:setvar DefaultLogPath "D:\Databases\"

文件名似乎也是自动生成的:

PRIMARY(NAME = [$(DatabaseName)], FILENAME = N'$(DefaultDataPath)$(DefaultFilePrefix)_Primary.mdf')
LOG ON (NAME = [$(DatabaseName)_log], FILENAME = N'$(DefaultLogPath)$(DefaultFilePrefix)_Primary.ldf')...

我在哪里可以设置路径和文件名?我不想在文件名上附加“_Primary”,路径需要一个额外的子文件夹。

如果我更改了发布脚本,下次 Visual Studio 生成此脚本时,我的更改可能会被覆盖。

最佳答案

您可以将预部署脚本添加到分离数据库、移动/重命名文件,然后使用新文件重新附加数据库的项目。

-- detach db before moving physical files
USE [master]
GO
exec sp_detach_db @dbname = N'$(DatabaseName)'
GO

-- enable xp_cmdshell
exec sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
exec sp_configure 'xp_cmdshell', 1 -- 0 = Disable , 1 = Enable
GO
RECONFIGURE
GO

-- move physical files
EXEC xp_cmdshell 'MOVE "$(DefaultDataPath)$(DefaultFilePrefix)_Primary.mdf", "C:\$(DatabaseName)\$(DatabaseName).mdf"'
EXEC xp_cmdshell 'MOVE "$(DefaultLogPath)$(DefaultFilePrefix)_Primary.ldf", "C:\$(DatabaseName)\$(DatabaseName)_log.ldf"'
GO

-- reattach db with new filepath
CREATE DATABASE [$(DatabaseName)] ON
(NAME = [$(DatabaseName)], FILENAME = 'C:\$(DatabaseName)\$(DatabaseName).mdf'),
(NAME = [$(DatabaseName)_log], FILENAME = 'C:\$(DatabaseName)\$(DatabaseName)_log.ldf')
FOR ATTACH
GO

-- disable xp_cmdshell
exec sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
exec sp_configure 'xp_cmdshell', 0 -- 0 = Disable , 1 = Enable
GO
RECONFIGURE
GO

USE [$(DatabaseName)];
GO

一些注意事项:

  • 为简单起见,我将 C:\硬编码为文件的新位置。您最好创建一个 SQLCMD 变量来存储此路径。
  • 如果 xp_cmdshell 'MOVE ... 失败,它会默默执行。为了让我的回答简单,我没有包括任何错误检查,但您可以通过简单地将 xp_cmdshell 的结果插入临时表来自行滚动。参见 How to capture the error output from xp_cmdshell in SQL Server .
  • 您可能会遇到 xp_cmdshell 'MOVE ... 命令的权限问题。在这种情况下,您可能需要在 MOVE 语句中调整源路径和目标路径的权限。您可能还需要以不同的用户身份运行该命令——请参阅 here (Permissions section)here对于初学者。

关于sql-server - 如何命名数据库的文件名并在 Visual Studio 2015 数据库项目中设置其位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32091368/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com