Как обращаться к файлам относительно корня проекта при развертывании проекта базы данных? - PullRequest
2 голосов
/ 16 февраля 2012

У меня есть проект базы данных в 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) в приведенном выше фрагменте ничего не изменилось, кроме имени переменной в сообщении об ошибке.Ошибка возникает на этапе проверки развертывания, а не во время самого развертывания.

Как правильно в сценарии после развертывания ссылаться на файлы, относящиеся к корневому каталогу проекта, для включениясодержимое этих файлов при развертывании базы данных?

1 Ответ

1 голос
/ 17 октября 2012

У меня очень похожая ситуация.Сценарий после развертывания включает в себя другой файл sql с использованием sqlcmd

:r "..\..\Another.sql"

В Another.sql я ссылаюсь на переменную, определенную в Database.sqlcmdvars, и VS жаловался, что переменная не была определена.Я вручную отредактировал файл проекта.Элемент PropertyGroup не содержал дочерних элементов DeploymentConfigFile и SqlCommandVariablesFile, поэтому я скопировал их из другого элемента PropertyGroup.Я понятия не имею, является ли это правильным решением, но теперь на переменную можно ссылаться.

  <PropertyGroup Condition=" '$(Configuration)' == 'Populate' ">
    <OutputPath>.\sql\Populate\</OutputPath>
    <TargetDatabase>SomeDatabase</TargetDatabase>
    <TargetConnectionString>Data Source=localhost;Integrated Security=True;Pooling=False</TargetConnectionString>
    <DeploymentConfigFile>Properties\Database.sqldeployment</DeploymentConfigFile>
    <SqlCommandVariablesFile>Properties\Database.sqlcmdvars</SqlCommandVariablesFile>
  </PropertyGroup>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...