我在 Visual Studio 2010 中有一个数据库项目,在部署后脚本中,我想将两个文件中的二进制数据导入数据库。为此,在从部署后脚本文件引用的文件中,我的代码非常类似于以下内容:
INSERT INTO [dbo].[MyTable] ([Column1], [Column2])
SELECT t1.BulkColumn, t2.BulkColumn
FROM
OPENROWSET(BULK N'$(ProjectDirectory)\Scripts\Post-Deployment\TestData\t1.dat', SINGLE_BLOB) AS t1,
OPENROWSET(BULK N'$(ProjectDirectory)\Scripts\Post-Deployment\TestData\t2.dat', SINGLE_BLOB) AS t2;
这以前奏效过。我不确定它在什么时候停止工作,但现在,我似乎得到的只是错误SQL01262: The variable 'ProjectDirectory' has not been defined
(具有讽刺意味的是,部署后脚本本身的错误位置,第 0 行第 0 列)。我翻遍了项目根目录下的文件,发现它有点像在项目文件本身中定义的,它在顶级<Project>
节点中有以下内容:
<ItemGroup>
<SqlCommandVariableOverride Include="ProjectDirectory=$(MSBuildProjectDirectory)" />
</ItemGroup>
在上面的代码片段中更改$(ProjectDirectory)
为$(MSBuildProjectDirectory)
除了错误消息中的变量名之外没有任何改变。该错误发生在部署的验证阶段,而不是部署本身。
在部署后脚本中,参考相对于项目根目录的文件的正确方法是什么,以便将这些文件的内容包含在数据库部署中?