当SQL Server数据库项目(*.sqlproj
)包含至少一个显式定义的文件组时,我注意到SQL Server数据工具(使用14.0.61707测试)的问题行为:即,默认PRIMARY文件组的{{ 1}}文件以及.mdf
文件(事务日志) not 放置在.ldf
的预期实例特定位置,而是放在{{1} (例如,%USERPROFILE%\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\{instance name}
)直接。
相比之下,包含仅 PRIMARY文件组的SQL Server数据库项目 - 即没有明确定义文件组或文件 - 将其.mdf和.ldf文件放在正确的实例中 - 上面的具体位置(%USERPROFILE%
)。
当切换数据库以定位不同的实例(例如,从C:\Users\fbar
到...\Instances\{instance name}
)时,此行为会导致问题,因为之前写入Projects
的数据文件正在阻碍新数据文件尝试写入新实例。这会导致如下错误:
ProjectsV12
这在我们的CI服务器上尤其成问题,其中文件是在用户无法直接访问的位置创建的,并且需要管理员清理它们。
我提出的唯一解决方案是在项目中添加一个新的“文件组文件”项,为PRIMARY文件组定义一个文件,如下所示:
%USERPROFILE%
这似乎会导致在所需的特定于实例的位置创建PRIMARY的Deploy error SQL72014: .Net SqlClient Data Provider: Msg 5170, Level 16, State 4, Line 1 Cannot create file 'C:\Users\fbar\Testing.mdf' because it already exists. Change the file path or the file name, and retry the operation.
和ALTER DATABASE [$(DatabaseName)]
ADD FILE
(
NAME = [PRIMARY],
FILENAME = '$(DefaultDataPath)$(DefaultFilePrefix)_PRIMARY.mdf'
) TO FILEGROUP [PRIMARY]
。
那么,这是SSDT中的一个错误吗?还有另外一种方法吗?