ExcelテーブルをSQL Server 2016 Expressにインポートし、インポートウィザードを使用してテーブルを作成しました。Excelから既存のSQL Serverテーブルに1つ以上の行を追加します。
Excelシートを更新すると、たとえば1行以上追加すると、SQL Serverテーブルを更新して1つまたは複数の行をテーブルに追加することもできます。これを行う最も簡単な方法は何ですか? 「追加」行の方法で。 Excelシート全体をもう一度追加したくありません。
ExcelテーブルをSQL Server 2016 Expressにインポートし、インポートウィザードを使用してテーブルを作成しました。Excelから既存のSQL Serverテーブルに1つ以上の行を追加します。
Excelシートを更新すると、たとえば1行以上追加すると、SQL Serverテーブルを更新して1つまたは複数の行をテーブルに追加することもできます。これを行う最も簡単な方法は何ですか? 「追加」行の方法で。 Excelシート全体をもう一度追加したくありません。
最も簡単な解決法を求めました。ウィザードを使用することですでに快適になっているので、最も簡単な方法はウィザードを使用して「更新された」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
が、その後問題がさらに複雑に、私が代わりに...イマイチが、単にテーブルを上書きすることができ、持続私のExcelシートをサーバーとリンクさせ、ストアドプロシージャで更新するlinked_serverオプション? – user2774480
興味深いことに、これは簡単だと考えています。もちろんこれも可能です。しかし、SQLサーバーはそのExcelファイルにアクセスする必要があります。したがって、アクセス権を正しく設定し、SQLとExcelファイルで作業するすべてのコンピュータからアクセスできるファイル共有が必要になります。その後、あなたはOPENROWSET( 'Microsoft.ACE.OLEDB.12.0'、 FROM 'SELECTでファイル* をインポートすることができ 'エクセル12.0のXml; HDR = YES; データベース= X:\のデータ・ファイル\ CustomersData.xlsx'、 [顧客を$])); ' – Ralph