1

後で出力をSQLに挿入し直すことができるように、selectステートメントを実行する最も簡単な方法は何ですか?データセットのサイズは非常に小さくなります(おそらく100行未満)。DB固有のインポート/エクスポートツールがあることはわかっていますが、これはSQLのみ(およびUNIXコマンドライン)でのみ実行できるのではないかと思います。

編集:

明確にするために、次の行に沿って一連の行を保存します。

select * from my_table where category='test'

そして、しばらくして、それらの一致する行を同じテーブルに挿入し直したいと思います。SQL select出力がファイルに保存され、ファイルがsqlコマンドラインユーティリティを介して再生されると想定していました。

4

3 に答える 3

2

これを行う 1 つの方法は、いくつかの文字列を結合して INSERT ステートメントを生成するだけで SQL を生成することです。MSSQL を使用していると仮定します。

SELECT'INSERT INTO Table1(Col1,Col2) VALUES('+CAST(Col1 AS VARCHAR(500))+',' +CAST(Col2 AS VARCHAR(500))+')' FROM Table1  

これは明らかにあまりうまくスケーリングできないため、これを行うのに最適な方法ではありませんが、特に迅速な回答が必要な場合は、小規模な使用ではそれほど悪くはありません.

データベースがどのように構成されているかはわかりませんが、挿入するデータが PK / FK 制約の影響を受けないことを確認してください。

この質問もチェックしてください: SQL Server テーブルの INSERT ステートメントを自動生成する最良の方法は何ですか?

また、BCP http://msdn.microsoft.com/en-us/library/aa196743(v=sql.80).aspx の使用を検討することもできます。SQL BCP の Google は、役立つはずの結果を大量に表示します。

コードベースのソリューションが必要なのはわかっていますが、SQL Management Studio からこの種のデータをエクスポートすることもできます (それを使用していると仮定します)。

于 2012-05-14T14:36:53.403 に答える
0

正しく理解できたかどうかわかりませんが、選択を実行して結果を同じコマンドでテーブルに挿入したいですか?

それができるかどうかはわかりませんが、あなたが望むもののように見えると私が思うことができるのは、 OUTPUT ステートメントです:

declare @mytables table
(
   name varchar(50)
)

INSERT INTO @mytables    
output inserted.*   
select name 
from sys.tables

@mytablesここでは、クエリの結果に挿入し、句select name from sys.tablesで結果を提示していますOUTPUT

于 2012-05-14T14:28:21.710 に答える
0

データベースがTableA { Id, Column1, Column2 }

SELECT 
     'INSERT INTO [TableA] ([Id], [Column1], [Column2])' 
     + VALUES (' + [Id] + ', ''' + [Column1] + ''', ''' + [Column2] + ''')'
FROM TableA

結果は次のようになります。

INSERT INTO [TableA] ([Id], [Column1], [Column2]) VALUES (1, 'Value1', 'Value2')
INSERT INTO [TableA] ([Id], [Column1], [Column2]) VALUES (2, 'Value11', 'Value22')

次に、結果をファイルにコピーできます

于 2012-05-14T14:37:44.263 に答える