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


240

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

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

回答:


442

コマンドプロンプトから起動し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] 

1
私のようないくつかの挿入があります:INSERT INTO table_name (text) VALUES ('some text bla bla 'bla' text')。引用符に誤りがあります。SOこのエラーを処理するために何を使用する必要がありますか(どのパラメーター)?ありがとう
Oleksandr Fentsyk 2013

1
スクリプトを外部ドライブに保存できますか?Eのように:ドライブ?Cドライブの代わりに?
アニ

10
このコマンドを使用して1GBのsqlファイルを実行したことを確認しています
Loupax

11
これは私にとっては
うまくいき

2
75G SQLファイルの実行に失敗しました。
アラジン

62

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

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

4
例に-dオプションを追加する場合は+1。SQLファイルで「USE [DBNAME]」を使用しました。これもうまくいきました。どちらがより良いか、または好ましい方法であるかわからない
Shaakir

3
ありがとう。データベースへの接続に必要なユーザー名とパスワードとして、次のコマンドを使用しました。 sqlcmd -S <Servername> -U <Username> -P <password> -d <Databasename> -i <filename>
Hriju 2016

1
パケットサイズを設定して解決した問題はどれですか。Microsoftは言う:「大きなパケットサイズがパフォーマンスを向上させることができます...」(docs.microsoft.com/en-us/sql/tools/sqlcmd-utility
信じられないほどの月

20

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

BigSqlRunner


400 MBのSQLファイル(INSERTステートメントでいっぱい)を使用して実行するまで、これも便利だと思いました。9時間実行した後、データベースには何も追加されていませんでしたが、BigSqlRunnerは3 GBから6 GBのメモリを消費していました。
Martijn 2017年

非常に便利。通常、私は手動でファイル(さまざまなツール)をチャンクに分割し、SQLステートメントが「全体」になるように手動で編集してから、バッチスクリプトを使用して実行します。これはとても簡単です。2.3gb .sqlファイル、簡単。
バリー

14
  1. 管理者権限でコマンドプロンプトを取得する

  2. .sqlファイルが格納されているディレクトリに移動します。

  3. 次のコマンドを実行します

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


7

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();
    }
}


2

同様の問題がありました。SQLスクリプトを含む私のファイルのサイズは150MBを超えていました(約900kの非常に単純なINSERTで)。(この質問の答えとして)Takuroがアドバイスした解決策を使用しましたが、メモリが不足しているというメッセージでエラーが発生しました(「このクエリを実行するには、リソースプール '内部'にシステムメモリが不足しています」)。

私を助けたのは、5万回のINSERTごとにGOコマンドを配置したことです。

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


1

あなたの質問はこれとかなり似ています

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

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

編集:私はあなたがファイルサイズにリンクされたSSMSに問題があることに気づきませんでした。次に、他の人が提案したコマンドライン、スナップショットレプリケーション(メインサーバーでパブリッシュ、ローカルサーバーでサブスクライブ、レプリケートしてからサブスクライブ解除)、またはバックアップ/復元を実行できます。


3
ジャックは、ファイルが大きすぎるため、SSMSからは実行できないと述べました。
レイブイセン、2009年

1

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

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

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


1つまたは2つのテーブルが大きなファイルを生成する場合、DBが数ギグであると想定しても安全です。これにより、多くの場合、バックアップと復元が実行不可能になります。
ケンパチ船長、

1

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

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

1
-U <ユーザー名> -P <パスワード>オプションコマンドは小文字ではなく大文字にする必要があります
eric xu

0

私は同じ問題に遭遇し、方法を見つけるために丸一日を費やしましたが、これは.sqlファイルのコピーを作成し、拡張子を.txtファイルに変更して.txtファイルをchromeブラウザーで開くことによって解決されます。私は魔法を見て、ファイルがブラウザで開かれました。

よろしくお願いします、

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.