web-dev-qa-db-ja.com

大きなMS SQL .sqlファイルをどのようにインポートしますか?

RedGate SQLデータ比較を使用して.sqlファイルを生成したため、ローカルマシンで実行できました。しかし、問題は、ファイルが300MBを超えていることです。つまり、クリップボードで処理できないためコピーアンドペーストができず、SQL Server Management Studioでファイルを開こうとするとエラーが発生します。ファイルが大きすぎることについて。

大きな.sqlファイルを実行する方法はありますか?このファイルには、基本的に2つの新しいテーブルのデータが含まれています。

214
Jack

コマンドプロンプトから、sqlcmdを起動します。

sqlcmd -S <server> -i C:\<your file here>.sql 

<server>をSQLボックスの場所に、<your file here>をスクリプトの名前に置き換えるだけです。 SQLインスタンスを使用している場合、構文は次のとおりです。

sqlcmd -S <server>\instance.

以下は、sqlcmdに渡すことができるすべての引数のリストです。

Sqlcmd            [-U login id]          [-P password]
  [-S server]            [-H hostname]          [-E trusted connection]
  [-d use database name] [-l login timeout]     [-t query timeout] 
  [-h headers]           [-s colseparator]      [-w screen width]
  [-a packetsize]        [-e echo input]        [-I Enable Quoted Identifiers]
  [-c cmdend]            [-L[c] list servers[clean output]]
  [-q "cmdline query"]   [-Q "cmdline query" and exit] 
  [-m errorlevel]        [-V severitylevel]     [-W remove trailing spaces]
  [-u unicode output]    [-r[0|1] msgs to stderr]
  [-i inputfile]         [-o outputfile]        [-z new password]
  [-f  | i:[,o:]] [-Z new password and exit] 
  [-k[1|2] remove[replace] control characters]
  [-y variable length type display width]
  [-Y fixed length type display width]
  [-p[1] print statistics[colon format]]
  [-R use client regional setting]
  [-b On error batch abort]
  [-v var = "value"...]  [-A dedicated admin connection]
  [-X[1] disable commands, startup script, environment variables [and exit]]
  [-x disable variable substitution]
  [-? show syntax summary] 
398
Ray Booysen

私はまったく同じ問題を抱えていましたが、しばらく苦労していましたが、最終的に-aパラメータをsqlcmdに設定してデフォルトのパケットサイズを変更する解決策を見つけました:

sqlcmd -S [servername] -d [databasename] -i [scriptfilename] -a 32767
55
Takuro

このツールも使用できます。本当に便利です。

BigSqlRunner

19
Yigit Yuksel
  1. 管理者特権でコマンドプロンプトを取得する
  2. .sqlファイルが保存されているディレクトリに移動します
  3. 次のコマンドを実行します

    sqlcmd -S 'your server name' -U 'user name of server' -P 'password of server' -d 'db name'-i script.sql

12
Syam Kumar

私はMSSQL Express 2014を使用していますが、解決策はありませんでした。それらはすべてSQLをクラッシュさせただけです。 1回限りのスクリプトを実行するが必要だったので、多くの単純な挿入ステートメントを使用して、最後の手段として小さなコンソールアプリを作成しました。

class Program
{
    static void Main(string[] args)
    {
        RunScript();
    }

    private static void RunScript()
    {
        My_DataEntities db = new My_DataEntities();

        string line;

        System.IO.StreamReader file =
           new System.IO.StreamReader("c:\\ukpostcodesmssql.sql");
        while ((line = file.ReadLine()) != null)
        {
            db.Database.ExecuteSqlCommand(line);
        }

        file.Close();
    }
}

Osqlを使用してコマンドラインで実行します。こちらを参照してください。

http://metrix.fcny.org/wiki/display/dev/How+to+execute+a+.SQL+script+using+OSQL

2
BobbyShaftoe

あなたの質問は this one によく似ています

ファイル/スクリプトを.txtまたは.sqlとして保存し、Sql Server Management Studioから実行できます(メニューは[開く]/[クエリ]で、SSMSインターフェイスでクエリを実行するだけです)。ローカルマシンで作成または選択するデータベースを示す最初の行を更新する必要があります。

このデータ転送を非常に頻繁に行う必要がある場合は、複製に進むことができます。ニーズに応じて、スナップショットレプリケーションは問題ありません。 2つのサーバー間でデータを同期する必要がある場合は、マージレプリケーションなどのより複雑なモデルを使用できます。

編集:あなたがファイルサイズにリンクされたSSMSに問題があることに気づきませんでした。その後、他の人が提案したコマンドライン、スナップショットレプリケーション(メインサーバーで公開、ローカルサーバーでサブスクライブ、複製、サブスクライブ解除)、またはバックアップ/復元に進むことができます

1

このファイルには、基本的に2つの新しいテーブルのデータが含まれています。

次に、2つのサーバーが同じネットワーク上にある場合、データを単にDTS(またはSQL Server 2005+の場合はSSIS)する方が簡単な場合があります。

2つのサーバーが同じネットワーク上にない場合、ソースデータベースをバックアップし、宛先サーバー上の新しいデータベースに復元できます。次に、DTS/SSISまたは単純なINSERT INTO SELECTを使用して、2つのテーブルを宛先データベースに転送できます。

1
P Daddy

これがお役に立てば幸いです!

sqlcmd -u UserName -s <ServerName\InstanceName> -i U:\<Path>\script.sql
1
ortegatorres10

同様の問題がありました。 SQLスクリプトを使用したファイルのサイズは150MBを超えていました(ほぼ900kの非常に単純なINSERTs)。 Takuroからアドバイスされた解決策を使用しましたが(この質問の答えとして)、メモリが不足しているというメッセージが引き続き表示されます(「このクエリを実行するには、リソースプール 'internal'にシステムメモリが不足しています」)。

私を助けたのは、50kINSERTsごとにGOコマンドを入力したことです。

(質問(ファイルサイズ)に直接対処しているわけではありませんが、大規模なSQLスクリプト自体に間接的に関連する問題を解決できると思います。私の場合、多くの挿入コマンド)

0
Bronek