2012-02-16 6 views
2

У меня есть проект базы данных в 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

У меня очень похожая ситуация. Сценарий после развертывания включает в себя другой 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> 

 Смежные вопросы

  • Нет связанных вопросов^_^