web-dev-qa-db-ja.com

SSMSで生成されたスクリプトの実行に失敗しました

そのため、新しいバージョンの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によって自動的に生成されたので、問題が何であるか混乱しています。ありがとう!

4
Will

-x引数 を指定してSQLCMDを実行し、可変サブステーションを無効にします。これにより、スクリプトにSQLCMD変数トークン($(stuff-here)など)が含まれているが、実際にはSQLCMD変数ではない場合の問題が回避されます。

3
Dan Guzman