2016-06-19 7 views
0

ExcelテーブルをSQL Server 2016 Expressにインポートし、インポートウィザードを使用してテーブルを作成しました。Excelから既存のSQL Serverテーブルに1つ以上の行を追加します。

Excelシートを更新すると、たとえば1行以上追加すると、SQL Serverテーブルを更新して1つまたは複数の行をテーブルに追加することもできます。これを行う最も簡単な方法は何ですか? 「追加」行の方法で。 Excelシート全体をもう一度追加したくありません。

答えて

1

最も簡単な解決法を求めました。ウィザードを使用することですでに快適になっているので、最も簡単な方法はウィザードを使用して「更新された」Excelシート/ファイルをSQL Server Expressにインポートすることです。それでも新しいテーブルにインポートしてください(古いテーブルは削除しないでください)。

その後、新しい行を挿入するか、単純なSQL MERGEステートメントでSQL Server上の既存のレコードを更新します。その後、既存のテーブルが更新されているため、インポートしたテーブルを再度削除/削除することができます。

私のテーブルはわかりませんが、次のSQLコードサンプルは、tblCustomersが終了テーブル(更新/新しい行の挿入)になり、tblCustomersNEWが新しいインポートになるという基本的な顧客テーブルの単純なマージを示しています。更新/ APPENDが完了すると)再び削除されます。

merge dbo.tblCustomers as target 
using dbo.tblCustomersNEW as source 
on source.ID = target.ID 
when matched then 
    update set target.Name = source.Name, 
       target.Country = source.Country 
when not matched by target then 
    insert (Name, Country) 
    values (
      source.Name, 
      source.Country 
      ); 

注意、あなたが; With myTable as...を開始する前に、セミコロンを必要とCTEに似MERGE声明requires a semicolon at the endこと。 MERGE文の詳細については

あなたはMSDNの記事で次の参照することもできます。https://msdn.microsoft.com/en-us/library/bb510625.aspx

+0

が、その後問題がさらに複雑に、私が代わりに...イマイチが、単にテーブルを上書きすることができ、持続私のExcelシートをサーバーとリンクさせ、ストアドプロシージャで更新するlinked_serverオプション? – user2774480

+1

興味深いことに、これは簡単だと考えています。もちろんこれも可能です。しかし、SQLサーバーはそのExcelファイルにアクセスする必要があります。したがって、アクセス権を正しく設定し、SQLとExcelファイルで作業するすべてのコンピュータからアクセスできるファイル共有が必要になります。その後、あなたはOPENROWSET( 'Microsoft.ACE.OLEDB.12.0'、 FROM 'SELECTでファイル* をインポートすることができ 'エクセル12.0のXml; HDR = YES; データベース= X:\のデータ・ファイル\ CustomersData.xlsx'、 [顧客を$])); ' – Ralph

関連する問題