1

挿入ステートメントの形式でバックアップのためにデータベースからデータを取得する必要があります

私はC#でボタンクリックでそれを行う必要があります。したがって、mysqldump ではなく、SQL クエリまたはストアド プロシージャがこれを行うのに適していると思います。

次に、すべてのテーブルにそれらが必要です。テーブル名と列名を書く代わりに。スキーマが異なるとクエリを変更する必要がないため、これらは information_schema から取得する必要があります。

解決策が既に存在する場合は、私を案内してください。

更新:解決策を準備しました。投稿されていますが、まだより良いものを探しています。

4

2 に答える 2

1

データベース全体のデータを取得するには - SqlFiddle Demo

1つのテーブルだけのデータを取得するには - - SqlFiddle Demo

複雑ではあるが許容できる解決策を作成しました。しかし、改善が必要です。

これは、複雑なコーディングを伴う複雑な手順であり、特に、すべての列のすべての行を単一の結果にフェッチgroup_concatし、複雑な連結でフォーマットするクエリです。

シンプルで効率的で、すべてのシナリオで機能する必要があります。

私の解決策の詳細:以下は重要な部分であり、その他は単なる条件/ループです(私はドキュメントに不慣れで、時間と提案が必要です。誰かがフォーマットと改善を手伝ってくれるかもしれません。ご不便をおかけして申し訳ありませんが、あなたと私からの助けを喜んでください)

注: group_concat(yourColumn separator ' --anySeparator-- ') は、行が --anySeparator-- で区切られるように、列のすべての行を 1 つにマージしています。

select group_concat(column_name separator '`,`') into @cns1 from
information_schema.columns where table_schema=dn and table_name=@tn;

1 : column_names は、で区切られた単一の値として取得されます。

`,` => @cs1 = id`,`ename`,`did

select group_concat(column_name separator '`,"\',\'",`') into @cns2
from information_schema.columns where table_schema=dn and table_name=@tn;

2 : column_names は、で区切られた単一の値として取得されます。

`','` => @cn2  = id`','`ename`','`did

set @cns1=concat("`",@cns1,"`");    set @cns2=concat("`",@cns2,"`");

3: 列名の先頭と末尾に抜け文字 (`) を入れる

set @res=concat(@res," insert into ",@tn,"(",@cns1,") values ('");

4: 単にres= " insert into emp(`id` ,`ename` ,`did`を作成) values("します ここで、なぜセパレーターを配置したかがわかります (MySql フォーマットが達成されます)

set @temp := '';
set @q := concat("select group_concat(concat(",@cns2,") separator \"'),('\")
 from ",dn,".",@tn, " into @temp");

上記は最も重要なステートメントです。テーブルからすべてのデータ行を単一の列の行として取得し、さらにこれらの行をマージして、'),('

5.1concat(",@cns2,")は、すべての列の値を 1 つの列にまとめて取得します。

5.2 最も外側の concat の後、@q は

 @q = "select group_concat(`id`','`ename`','`,did` separator '),(' from 
mydb.emp into @temp";

5.3 : group_concat は、結合された列のすべての行を 1 つの値にマージします。列の値は @cns2 に存在するセパレーターを介して結合され、行レベルの結合は使用されます'),('

prepare s1 from @q;
execute s1;deallocate prepare s1;
set @res = concat(@res,@temp,");");    

@q が実行されます

set @res = concat(@res,@temp,");");

6 : そして、次のような結果が得られます

 res was = insert into emp(`id`,`ename`,`did`) values ('
@temp = 1','e1','4'),('2','e2','4'),
('3','e3','2'),('4','e4','4'),('5','e5','3

そして、@res = concat(@res,@temp,");");私たちが得た後

 insert into emp(`id`,`ename`,`did`) values ('1','e1','4'),('2','e2','4'),
('3','e3','2'),('4','e4','4'),('5','e5','3);
于 2012-09-24T20:26:10.370 に答える
0
select concat("insert into users (id,name,password) values ('",id,"'"), 
concat(",'",username,"'"),
concat(",'",password,"'),") INTO OUTFILE 'c:\\datas\\asd.txt' from users
于 2012-09-23T22:23:36.773 に答える