2017-07-13 51 views
0

私は、テスト環境に夜間に自動的にデプロイしようとしているVisual StudioにDatabase projectを持っています。これを達成するために、PowerShellスクリプトを利用して "SqlPackage.exe"を実行して、その日に発生した変更を展開するTFSを使用しています。このprocの影響を与える変更を展開する場合

$(ESCAPE_SQUOTE(JOBID)) 

、:

私のprocsのいくつかは、エージェントのジョブステップの一部であり、(動的SQLで)following codeを含むスクリプトの内部で実行されるロジックが含まれています

SQL Execution error: A fatal error occurred. Incorrect syntax was encountered while $(ESCAPE_SQUOTE(was being parsed.

これ

は、それがサポートされていないかのようにそれが表示され、 known issueです:私は、次の問題を取得します。 variableとして$(文字を誤って解釈「sqlcmdの」コマンドの関数であることが表示されます?

"override the value of a SQL command (sqlcmd) variable used during a publish action."

は、どのように私はこの問題を回避んそれはあなたができること「のsqlcmd」の主要な限界のようです「がtはあなたが( 『-x』引数を、それを供給することによって、 『sqlcmdの』からの変数置換を無効にすることができてと1

はそう

更新...私はことをサポートするパラメータが表示されていない、変数を無効にしますSource,Documentation):

-x (disable variable substitution)

「SqlPackage.exe」からこれを行う方法はまだありません。

+0

'sqlpackage.exe'コマンドを直接使用すると、同じ結果が得られます。だからこの問題はTFSには関係していないようです。 –

+0

これは 'sqlpackage.exe'コマンドで直接問題にはなりません。本当に必要なのは、コードをデプロイするときにパラメータを無効にする方法です。私はsqlpackageは、デプロイ時にsqlcmdを呼び出すと思いますが、変数を無効にすることができるオプションは表示されません。 –

答えて

0

"$(ESCAPE_SQUOTE(JOBID))"文字列をスカラー関数にリファクタリングし、 "-x"パラメータを指定して "Sqlcmd"コマンドを直接呼び出すようにPowerShellスクリプトを設定する方法があります"SqlPackage.exe"を実行する前に "作成/変更"機能を実行してください。

PowerShellで次のようになります。

$sql = @" 
USE $database 
GO 

CREATE FUNCTION [dbo].[GetJobID]() 
RETURNS NVARCHAR(MAX) 
AS 
BEGIN 
    RETURN '$(ESCAPE_SQUOTE(JOBID))' 
END 

GO 
"@; 

Sqlcmd -S $servername -U $username -P $password -Q $sql -x; 

は、これはかなり貧弱な回避策ですが、それはタスクを達成しません。本当に良いものを本当に望んでいる。

関連する問題