sql >> データベース >  >> RDS >> Sqlserver

SQL Server 2008のスクリプト生成ウィザードは、閉じられていない引用符を生成するスクリプトを提供します

    SQLServerインポートの問題の解決策

    前提条件

    あるSQLServerから別のSQLServerに(たとえば、実稼働環境からテスト環境に)データを移動するには、SQL ServerManagementStudioのデータベースオプションで使用できる「スクリプトの生成」機能を使用するのが理にかなっています。この操作の結果は、別のSQLServerで実行できるSQLコマンドを含むテキストファイルです。通常、これらのファイルは大きすぎてSQL Server Management Studioで実行できないため、 sqlcmdを使用する必要があります。 SQLServerインストールパッケージのコマンドラインユーティリティ。ほとんどの場合、ユーティリティはスムーズに機能し、追加のユーザーアクションは必要ありません。

    問題の説明

    まれに、 sqlcmd ユーティリティはインポートで失敗し、次のエラーが発生する可能性があります:「文字列の後に引用符が閉じられていません...」これは、SQLクエリの1つが実行されていないことを示します。これは、 sqlcmdが原因で発生します ストリーム処理を使用して機能します。つまり、データの一部を読み取り、処理し、次の部分を読み取ります。場合によっては、入力ファイルに、 sqlcmdで処理できるデータの量よりも大きいサイズの巨大なSQL命令が含まれていることがあります。 一度に、 sqlcmd 壊れたSQLを実行しようとして失敗します。

    考えられる解決策

    この問題を修正するには、2つのアプローチを使用できます。

    • sqlcmd ユーティリティは、処理中に使用されるパケット(データの一部)の最大サイズを定義する「-a」パラメータを受け入れることができます。最大値は32767、デフォルト値は4096であるため、常にこのパラメーターを最大値で使用するのが理にかなっています。

      sqlcmd -i input.sql -a 32767 -o import_log.txt
      
    • 最初のアプローチが役に立たず、問題がまだ発生する場合は、別のより難しい解決策があります:

      • Cygwinをインストールする
        • インストール中、いくつかの標準画面の後、「パッケージの選択」画面で停止します
        • [検索]フィールドに「sed」と入力し、下のツリーで[ベース]カテゴリを展開して、インストール用に4.2.2以上のバージョンを選択します
        • 完全なインストール
        • 注:「sed」は、ストリームベースのファイル処理を可能にするLinuxユーティリティです
      • インストールが完了したら、デスクトップから「Cygwin64ターミナル」を実行します。次のステップで使用します
      • SQL ServerManagementStudioによって生成されたSQLファイルが配置されているディレクトリに移動します。 「\」であるWindowsスタイルの代わりにLinuxスタイルのスラッシュ「/」を使用する必要があります

          cd d:/temp
        
      • SQLファイルのエンコーディングをUTF-16LEからUTF-8に変更します。「sed」はUTF-16LEを処理できないため、この変換はデータにとって安全です。結果は新しいファイルになり、次のステップで使用します

          iconv -f UTF-16LE -t UTF-8 input.sql > input_utf8.sql
        
      • 新しいファイルを変換して、1つのバッチに1つのSQLクエリを作成します。結果は新しいファイルになり、次のステップで使用します

          sed -e 's/^INSERT/GO\nINSERT/' input_utf8.sql > input_utf8_adapted.sql
        
      • これで、ファイル「input_utf8_adapted.sql」はsqlcmdによって問題なく処理されるはずなので、以下を実行できます。

          sqlcmd -i input_utf8_adapted.sql -a 32767 -o import_log.txt
        
      • 実行が完了したら、import_log.txtをチェックして、エラーが表示されていないことを確認してください



    1. OracleでのFLASHBACKの使用

    2. 1つのテーブルを多くの異なるテーブルに関連付けるにはどうすればよいですか?

    3. 文字列値が正しくありません:'\ xF0 \ x9F \ x8E \ xB6 \ xF0 \ x9F ...' MySQL

    4. MariaDBMaxScale2.4の新機能