1

Visual Studio 2012のデータベースプロジェクトを使用してデータベースをシードしようとしています。展開後のスクリプトのパークとして、次のようなステートメントがあります。

INSERT INTO SomeTable (SomeTextCol) Values (N'$(function(){});')

列は次のように定義されますNVARCHAR(MAX)

これにより、ビルド後のイベントが失敗します。ただし、奇妙なことに、SSMSを使用してステートメントを実行すると、成功します。

これは、データベースプロジェクトがバックグラウンドでSQLCMDを使用していることが原因ですか?

このエラーを修正するにはどうすればよいですか(jQueryをテーブルに挿入することはできますが)-スキーマを所有していないため、列の値を変更することはできません。

4

1 に答える 1

2

そうです、これは$が特殊文字であるsqlcmdが原因です。これを修正する1つの解決策は、2つの文字列を連結することです。

INSERT INTO SomeTable (SomeTextCol) Values (N'$'+'(function(){});');

少し醜いですが、動作します。別の方法は、完全な名前のようにjQueryに別の記号を使用することです。

INSERT INTO SomeTable (SomeTextCol) Values (N'jQuery(function(){});');

または、関数内にjQueryへの参照がたくさんある場合:

(function(JQ){
  JQ(
     function(){
     //other references to JQ
     }
  );
 }
)(jQuery);

この最後のソリューションには、 「あなたの」はコードにのみ表示されるクロージャーで定義されるため、ページを定義している人$やページ上の他の場所でコードが壊れないという追加の利点があります。JQJQ

于 2013-03-15T18:36:12.287 に答える