1

にインポートされたデータベース.sqlprojと、.publish.xml変更をリモート DB に発行する発行プロファイルがあります。

私の理解では、右クリック -> 発行 -> スクリプトの生成、ローカル定義とリモート DB の差分を計算し、リモート DB を整列させるスクリプトを生成する必要があります。

これはすべて問題なく動作するように見えますが、生成されるスクリプトには、変更されたかどうかにかかわらず、同じ 40 程度の関数と手順 (定義された合計約 1000 のうち) のALTER FUNCTIONandステートメントが常に含まれています。スクリプト関数 as -> ALTER を使用したステートメントを SSMS のスクリプトと比較すると、それらはまったく同じです。ALTER PROCEDUREALTER

だから私の質問は、VSがこれらが異なると考えるのはなぜですか、それとも同じであるのになぜそれらを再作成するのでしょうか?

ノート:

  • 関数は特別なものではなく、varchar を定義し、値を設定して返すという単純なものもあります。
  • スクリプトをデータベースに実行しようとしましALTERたが、引き続き生成されます。
  • SSMS でプロパティ (右クリック -> プロパティ) を確認しましたが、常に再作成されるものと再作成されないものについて明らかに異なるものは見当たりません。
  • 私のパブリッシュ プロファイルは標準的なものです。

ありがとう

4

2 に答える 2

1

この問題があり、次の方法で解決できました。

  1. Windows の行末を使用するようにグローバル Git 構成を変更する:
    git config --global core.autocrlf true.

  2. ローカル リポジトリを削除し、再クローンします。

于 2021-09-30T16:16:04.047 に答える
0

アップデート:

.dacpac の名前を .zip に変更し、model.xml を抽出すると<HeaderContents>、一部の手順に&#xA;(LF - 改行文字) が含まれていることがわかりました。

これにより、何らかの理由で、すべての .SQL ファイルに Windows の行末 (CR LF) ではなく UNIX の行末 (LF) が含まれていることに気付きました。すべてのファイルをウィンドウの行末に変換すると(notepad++ を使用)、問題が解決しました。

オリジナル:

OK、それらのほとんどは改行文字を含むスクリプトの文字列定数が原因のようです。それらを手動で定義された文字に置き換えることは、それらが再展開のために選択されなくなったことを意味します。すなわち

SET @doesnt_work = 
'FOO
BAR'

で置き換えることができます

SET @works = 'FOO'  + CHAR(13) + CHAR(10) + 'BAR'

注:これは解決策というよりも回避策であり、誰かがこれを行うためのより良い方法を提案できることを願っています...

于 2016-10-13T10:19:32.530 に答える