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


413

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

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

回答:


682

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

これにより、1つまたはすべてのテーブルのスクリプトを生成できます。オプションの1つは「スクリプトデータ」です。これをTRUEに設定すると、ウィザードはデータに対してINSERT INTO()ステートメントを含むスクリプトを生成します。

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

代替テキスト

2008 R2以降、例:2012

「スクリプトへのデータのタイプ」を選択します。「データのみ」、「スキーマとデータ」、または「スキーマのみ」(デフォルト)を選択できます)。

ここに画像の説明を入力してください

そして、Codeplex(ソースを含む)に「SSMSアドイン」パッケージがあり、ほぼ同じ機能といくつかの機能(クイックファインドなど)が約束されています。

代替テキスト


Codeplexからアドインをインストールしました。いいね。情報をありがとう。
Rob Garrison、

1
SMSSアドインは2008年に機能しました。DataScripter Add Inは機能しませんでした。
Phil Hale

5
2008 R2では、「スクリプトを作成するデータのタイプ」オプションは「スクリプトオプションの設定」画面にあります。そこで「詳細」ボタンを押してください。
raymi

3
これらのアドインは2008 R2で機能しますか?SSMSアドインがロード時に例外をスローしています。
jocull 2012


117

marc_sの指示に従ってここまで行った後、過度に無知になるために ...

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

...次に、下部に「前へ」、「次へ」、「終了」、「キャンセル」ボタンが付いた「はじめに、オブジェクトの選択、スクリプトオプションの設定、要約、およびスクリプトの保存または公開」を含むウィザード画面が表示されます

[ スクリプトオプション設定] ステップで[詳細]クリックして、オプションのあるページを取得する必要があります。次に、Ghlouwが述べたように、「スクリプトを作成するデータのタイプ」を選択して利益を得ます。

詳細ボタンが赤くハイライトされました!1 !!


13
おかげで、このボタンの配置はあまり直感的ではありません。「ファイルに保存」に属しているはずです。
Karel Kral 2016

48

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

ここに画像の説明を入力してください


2
また、2012年に適用される
OldCurmudgeon

1
また、2014年に適用される
NucS

2
私のように混乱している場合、[スクリプトを作成するデータの種類]オプションは、[スクリプトの生成...]ウィザードの[詳細]オプションにのみ表示されます。メインオプションダイアログには表示されません。
Etherman

36

SQL Server 2008 R2を実行している場合、上記のmarc_sが少し変更されたため、SSMSでこれを実行するための組み込みオプション。Script data = true彼の図に示すように選択する代わりに"Types of data to script"、「テーブル/ビューオプション」グループのすぐ上に新しいオプションが呼び出されるようになりました。ここでは、スクリプトデータのみ、スキーマとデータ、またはスキーマのみを選択できます。魅力のように機能します。



6

コマンドラインバージョンを探している人のために、これを行うために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

現在、mssql-scripterは死んだプロジェクトのようです。
Alex Suzuki

確かに、昨年は何も進展がありませんでしたが、私にとってはうまくいきました。
Nickolay

3

2019年頃の新しいv18を使用しているので、スクリーンショットを更新して他の人を助けるだけです。

DBを右クリック:タスク>スクリプトの生成

ここでは、特定のテーブルを選択するか、デフォルトのallを使用できます。

ここでは、特定のテーブルを選択するか、デフォルトのallを使用できます。私自身のニーズについては、1つのテーブルのみを示しています。

次に、出力ファイルなどを選択できる「スクリプトオプション」があります。上記の複数の回答と同じように(ここでも、新しいv18.4 SQL Server Management Studioの古い回答をほんの少し探しています) 「詳細」ボタンの下にあります。私自身の目的のために、私はデータだけが必要です。

ファイルへの出力を含む一般的な出力オプション。 データを含む高度なオプション!

最後に、実行前のレビューの要約があります。実行後、オペレーションのステータスレポートが表示されます。 批評要旨。


2

また、SQL Server Management Studio 2008の「Data Scripter Add-In」を以下からチェックアウトすることもできます。

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

上記のすべてがいいですが、必要な場合

  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;

上記の例は、テーブルなしの選択にデュアルの使用が必要なOracleのdbに対して作成されました。

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


1

以下は、カーソルを使用してソーステーブルを反復処理するデータ移行スクリプトの作成例です。

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'

0

多くの検索の後、それは私の最高のショットでした:

多くのデータがあり、コンパクトでエレガントなスクリプトが必要な場合は、それを試してください:SSMSツールパック

ターゲットテーブルにアイテムを挿入し、トランザクションを適切に処理するために、すべてのselectステートメントの和集合を生成します。

スクリーンショット

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