そのため、新しいバージョンのSQL Serverから小さなDB(1 GB未満)をインポートする必要がある状況にあります(私は、2016のSQLサーバーから2014のSQLサーバーに復元しています)。このDBはCMSのバックエンドであるため、従来のデータだけでなく、htmlコンテンツも格納します。
私が見つけた解決策( 私はこのガイドに従いました 。)は、SSMS(スキーマ+データ)の「スクリプトの生成」を使用してデータベースをスクリプト化し、スクリプトを実行して宛先サーバーでスクリプトを再作成しました。 。結果のスクリプトは合計で約900MBです。
最初に遭遇した問題は、SSMSがスクリプトに対して大きすぎるため、SSMSがスクリプトを実行しないことでした。 Sqlcmdはスクリプトの実行を開始できましたが、10000行以上が失敗しました。失敗した時点でスクリプトをカットしたところ、中断したところから問題なく動作し続けたので、メモリ不足に関係したのではないかと思います。私が受け取った特定のエラーは
"Sqlcmd Error: Syntax Error at line 14769 near command ' " ' in file <path\script.sql>".
14769の実際の行は次のとおりです。
INSERT [dbo].[sf_control_properties] (
[val],
[validation],
[prnt_prop_id],
[ordinal],
[nme],
[last_modified],
[language],
[id],
[flags],
[description_],
[control_id],
[caption_],
[app_name],
[voa_version]
)
VALUES (
N'RulesGroupBackend',
NULL,
NULL,
1,
N'ControlDefinitionName',
CAST(N'2018-03-23T12:35:50.977' AS DateTime),
NULL, N'7cf975d2-f37d-4716-a634-0d6424921f38',
1,
NULL,
N'27c93f05-386b-4fd2-8aae-d6664ee7e57a',
NULL,
N'Title/',
1)
前の行(複数行ステートメント14766-14768)は次のとおりです。
INSERT [dbo].[sf_control_properties] (
[val],
[validation],
[prnt_prop_id],
[ordinal],
[nme],
[last_modified],
[language],
[id],
[flags],
[description_],
[control_id],
[caption_],
[app_name],
[voa_version]
)
VALUES (
N'$(document).ready(function(){
$("#content > div > section:nth-child(2) > div > div > div > div > div:nth-child(1) > h2").text("English Support");
});',
NULL,
N'5d056cac-51db-492c-b601-e88c82a8bc72',
1,
N'InlineCode',
CAST(N'2018-11-27T20:33:59.060' AS DateTime),
NULL,
N'1f8ac206-d771-42b2-9991-0ca66bceff19',
1,
NULL,
NULL,
NULL,
N'Title/',
1
)
コマンド「」の近くの14769行に構文エラーと表示された場合、エラーの意味がわかりません
つまり、要約すると、A)これらの行のスクリプトで問題が発生している可能性がありますB)これはsqlcmdの問題かどうかです(SSMSでもスクリプトが失敗したため)。私にはスクリプトは問題なく表示され、結局、SSMSによって自動的に生成されたので、問題が何であるか混乱しています。ありがとう!
-x引数 を指定してSQLCMDを実行し、可変サブステーションを無効にします。これにより、スクリプトにSQLCMD変数トークン($(stuff-here)など)が含まれているが、実際にはSQLCMD変数ではない場合の問題が回避されます。