情境: 我有3个环境,我正在使用Dev,UAT和Live。每个都有自己的数据库,MyDb_Dev,MyDb_UAT,MyDb_Live。 然后我在我的解决方案中有一个VS2012数据库项目,其中包含我的所有脚本。当我对位于本地的模型数据库(MyDb_Model)进行更改时,这很有效。
我想做什么: 我想在SQL 2012中使用FileTables(我了解如何设置),但是我不知道如何编写脚本以便能够配置处理我的环境的选项。当我生成脚本时,它会将名称硬编码为MyDb_Model作为FileGroup。另外,也就是说,当我尝试发布到我的Dev数据库时,它抱怨数据库选项无法使用新脚本。当我脚本包含Model数据库的选项时,当我尝试发布到我的Dev数据库时会因为重复名称而抱怨。
问题: 您是否可以使用V2012中的数据库项目编写FileTables(使用数据库选项)进行脚本编程,或者我是否需要手动创建自己的脚本?
首选: 将MyDb_Model与Database项目进行比较。 发布到MyDb_Dev作为新创建的数据库。
答案 0 :(得分:1)
听起来你会希望项目变量处理这个变量,其中变量包含每个变量的特定于环境的文本。然后,您可以在对象中使用该变量,而不是硬编码路径。下面将创建一个名为“DocumentStore”的FileTable,并使用您在Project Properties - SQLCMD Variables中设置的名为“FileTableDirectoryVariable”的变量的值。设置发布配置文件中的每个都使用正确的目录,你应该是好的。如果您对这些表使用不同的文件组,则应该能够使用SQLCMD变量以类似的方式调整FileGroup设置。
CREATE TABLE DocumentStore AS FileTable
WITH (
FileTable_Directory = '$(FileTableDirectoryVariable)',
FileTable_Collate_Filename = database_default
);
GO