2016-09-19 6 views
3

ポストデプロイメントスクリプトでクエリを使用して初期化するテーブルに追加の列を追加しました。残念ながら私は毎回実行できるクエリを書くようには思えないので、カラムが利用可能である場合にはデプロイ前のスクリプトをチェックインし、引数または変数をデプロイ後のスクリプトに渡す方法を探しています。一度初期化クエリを実行します。SQL Serverデータベースプロジェクトのデプロイメント前およびデプロイメントスクリプト

試み1:私は前の展開スクリプトでsqlcmd VARを設定しようとしたが、次の構文が許可されていません。

IF COL_LENGTH('dbo.Table','NewColumn') IS NULL 
    :setvar PerformInitQuery 1 

試み2:私はまた、通常のを使用して試してみました配置前スクリプト内の変数:

DECLARE @PerformInitQuery BIT = 0 
IF COL_LENGTH('dbo.Table','NewColumn') IS NULL 
    SET @PerformInitQuery = 1 

そして、配置後スクリプトでそれをアクセス:

IF @PerformInitQuery = 1 
BEGIN 
    :r ".\DeploymentScripts\PerformInitQuery.sql" 
END 

この最後の試みは、Visual Studioからプロジェクトを公開するときには動作していましたが、ビルドサーバーでは動作しませんでした。 SqlPackage.exeを使用して、生成された.dacpacファイルをデータベースに公開します。

エラーSQL72014:.NET SqlClientデータプロバイダー:

メッセージ137、レベル15、状態2、行12
はスカラ変数を宣言しなければなりません "@PerformInitQuery"

+0

通常の変数は、単一のバッチ内にしか存在しないため、機能しません。展開では、複数のバッチが使用されます。作成スクリプトをチェックするだけで、複数のGO文が表示されます。プレ・デプロイメントで行ったのと同じチェックをデプロイメント後に追加するのはなぜですか? – JodyT

+0

デプロイ後のスクリプトが実行される前にビルドによって列が作成されるため、この実行または実行が作成されたかどうかを判断する方法がありません – Zenuka

答えて

3

あなたは試みることができますスクリプトの前から後に渡す値を保持する一時テーブルを使用します。

/* 
    Pre-Deployment Script Template       
    -------------------------------------------------------------------------------------- 
    This file contains SQL statements that will be executed before the build script. 
    Use SQLCMD syntax to include a file in the pre-deployment script.   
    Example:  :r .\myfile.sql        
    Use SQLCMD syntax to reference a variable in the pre-deployment script.   
    Example:  :setvar TableName MyTable        
        SELECT * FROM [$(TableName)]     
    -------------------------------------------------------------------------------------- 
    */ 

    select 'hello world' as [Col] into #temptable 

配備後スクリプトで取り上げられました。

/* 
Post-Deployment Script Template       
-------------------------------------------------------------------------------------- 
This file contains SQL statements that will be appended to the build script.  
Use SQLCMD syntax to include a file in the post-deployment script.   
Example:  :r .\myfile.sql        
Use SQLCMD syntax to reference a variable in the post-deployment script.  
Example:  :setvar TableName MyTable        
       SELECT * FROM [$(TableName)]     
-------------------------------------------------------------------------------------- 
*/ 

declare @var nvarchar(200) 
select @var = [Col] from #temptable 

print @var 

のHello World

更新が完了しました。

+0

ありがとう、これは仕事でした! – Zenuka

+0

よろしくお願いします! –

関連する問題