web-dev-qa-db-ja.com

SQL ServerでINSERT INTOとしてデータをエクスポートする

SQL Server 2008 Management Studioを使用していて、別のデータベースサーバーに移行したいテーブルがあります。

SQLスクリプトへの挿入としてデータをエクスポートするためのオプションはありますか。

375
Jack Kada

オブジェクトエクスプローラのSSMSで、データベースを右クリックして右クリックし、[タスク]、[スクリプトの生成]の順に選択します。

これにより、単一のテーブルまたはすべてのテーブルに対してスクリプトを生成できます。選択肢の1つに "Script Data"があります。これをTRUEに設定すると、ウィザードはデータに対してINSERT INTO()ステートメントを使用してスクリプトを生成します。

2008 R2または2012を使用している場合、それは別の名前と呼ばれています。下のスクリーンショットを参照してください

alt text

2008 R2以降、たとえば2012

[スクリプトするデータの種類]を選択します。これは[データのみ]、[スキーマとデータ]、または[スキーマのみ](デフォルト)のいずれかです。

enter image description here

それから、Codeplex上の " SSMS Addin "パッケージ(ソースを含む)があり、これはほとんど同じ機能とそれ以外のもの(クイック検索など)を約束する

alt text

636
marc_s

marc_sの指示に従った後に、過度に明白な無意味さのために ...

オブジェクトエクスプローラのSSMSで、データベースを右クリックして[タスク]、[スクリプトの生成]の順に選択します。

...そして、 " はじめに、オブジェクトの選択、スクリプトオプションの設定、要約、およびスクリプトの保存または発行 "というウィザード画面が表示されます。

スクリプトオプションの設定ステップ で、オプションを含むページを表示するには、 [詳細] をクリックする必要があります。それから、 Ghlouw が述べたように、あなたは今 "スクリプトするデータの種類"と利益を選択します。

advanced button HIGHLIGHTED IN RED!1!!

103
ruffin

SQLServer 2008R2を使用する場合は、スクリプトフィールドにデータの種類を設定する必要があります。

enter image description here

44
Azadeh Khojandi

SQL Server 2008 R2を実行している場合は、上記のmarc_sがSSMSでこれを実行するための組み込みオプションが少し変わりました。図のようにScript data = trueを選択する代わりに、 "Table/View Options"グループのすぐ上に"Types of data to script"という新しいオプションが追加されました。ここでは、スクリプトのデータのみ、スキーマとデータ、またはスキーマのみを選択できます。魅力のように働きます。

36
Ghlouw

コマンドラインバージョンをお探しの方は、Microsoft mssql-scripter をリリースしてください。

$ pip install mssql-scripter

# Generate DDL scripts for all database objects and DML scripts (INSERT statements)
# for all tables in the Adventureworks database and save the script files in
# the current directory
$ mssql-scripter -S localhost -d AdventureWorks -U sa --schema-and-data \
                 -f './' --file-per-object
5
Nickolay

SQL Server Management Studio 2008の "Data Scripterアドイン"を次のサイトからチェックアウトすることもできます。

http://www.mssql-vehicle-data.com/SSMS


それらの機能リスト:

  • これはSSMS 2008で開発されたもので、現時点では2005年バージョンではサポートされていません(まもなく!)

  • MSSQLおよびMySQL構文のためにデータをT-SQLに素早くエクスポート

  • CSV、TXT、XMLもサポートされています。 SQLが提供しなければならない可能性、能力、およびスピードを最大限に活用します。

  • AccessまたはExcelがスクリプト作業を行うのを待つのではなく、数分かかることがあります。SQLServerに任せて、データをエクスポートするための推測作業をすべて行ってください。

  • 高速バックアップ、DDL操作などのためにデータ出力をカスタマイズします。

  • テーブル名とデータベーススキーマを必要に応じて迅速かつ効率的に変更します。

  • 列名をエクスポートするか、名前を付けずに単純にデータを生成します。

  • 個々の列を選択してスクリプトを作成することができます。

  • データのサブセットを選択できます(WHERE句)。

  • データの順序付けを選択できます(ORDER BY句)。

  • データ操作を必要とするそれらの汚れたデータベースデバッグ操作のための素晴らしいバックアップユーティリティ。実験中にデータを失うな。その場でデータを操作する!

2
Nate

上記のすべてはいいですが、あなたがする必要がある場合

  1. 結合を使用して複数のビューおよびテーブルからデータをエクスポートする
  2. 異なるRDBMS用の挿入ステートメントを作成する
  3. 任意のRDBMSから任意のRDBMSにデータを移行する

それから次のトリックは唯一の方法です。

まず、ソースdbコマンドラインクライアントからスプールファイルを作成したり結果セットをエクスポートしたりする方法を学びます。次に、宛先データベースでSQLステートメントを実行する方法を学びます。

最後に、ソースデータベースでsqlスクリプトを実行して、送信先データベースの挿入ステートメント(およびその他のステートメント)を作成します。例えば.

SELECT '-- SET the correct schema' FROM dual;
SELECT 'USE test;' FROM dual;
SELECT '-- DROP TABLE IF EXISTS' FROM dual;
SELECT 'IF OBJECT_ID(''table3'', ''U'') IS NOT NULL DROP TABLE dbo.table3;' FROM dual;
SELECT '-- create the table' FROM dual;
SELECT 'CREATE TABLE table3 (column1 VARCHAR(10), column2 VARCHAR(10));' FROM dual;

SELECT 'INSERT INTO table3 (column1, column2) VALUES (''', table1.column1, ''',''', table2.column2, ''');' FROM table1 JOIN table2 ON table2.COLUMN1 = table1.COLUMN1;

上記の例は、テーブルレス選択にdualの使用が必要なOracleのdb用に作成されました。

結果セットには、送信先データベースのスクリプトが含まれます。

2
Αλέκος

sQLサーバーMng Studio 2016の場合:

enter image description here

2
ingconti

これは、カーソルを使用してソーステーブルを繰り返すデータ移行スクリプトを作成する例です。

SET NOCOUNT ON;  
DECLARE @out nvarchar(max) = ''
DECLARE @row nvarchar(1024)
DECLARE @first int = 1

DECLARE cur CURSOR FOR 
    SELECT '(' + CONVERT(CHAR(1),[Stage]) + ',''' + [Label] + ''')'
    FROM CV_ORDER_STATUS
    ORDER BY [Stage]

PRINT 'SET IDENTITY_INSERT dbo.CV_ORDER_STATUS ON'
PRINT 'GO'

PRINT 'INSERT INTO dbo.CV_ORDER_STATUS ([Stage],[Label]) VALUES';

OPEN cur
FETCH NEXT FROM cur
    INTO @row

WHILE @@FETCH_STATUS = 0
BEGIN
    IF @first = 1
        SET @first = 0
    ELSE
        SET @out = @out + ',' + CHAR(13);

    SET @out = @out + @row

    FETCH NEXT FROM cur into @row
END

CLOSE cur
DEALLOCATE cur

PRINT @out

PRINT 'SET IDENTITY_INSERT dbo.CV_ORDER_STATUS OFF'
PRINT 'GO'
1
Shane

たくさん検索した後、それは私のベストショットでした:

たくさんのデータがあり、コンパクトで洗練されたスクリプトが必要な場合は、試してみてください。 SSMS Tools Pack

これは、ターゲットテーブルにアイテムを挿入し、トランザクションをうまく処理するための、すべてのselectステートメントを結合したものです。

スクリーンショット

0