0

行の完全な母集団を含む列 (MyGroup、FSGRoup、Account、BrokerCode、AccountType、NewInvestmentType、AccountOrder、LPI、LPII、LPIII) を含む一時テーブル #t があるとします。

同じレイアウトを持つ別のテーブル #t2 があり、#t に含まれる行のサブセットのみがあります。MyGroup、FSGRoup、Account、BrokerCode、AccountType、NewInvestmentType、AccountOrder 列に一致がない場合、#t にあるが #t2 にはない行を #t2 に挿入したいと考えています。

助言がありますか?

4

3 に答える 3

1

以前に提案したように、merge ステートメントを使用したくない場合は、次のようなことができます。最初のクエリは、外部結合を使用して #t にあるが #t2 にない行を取得し、それらを 3 番目の一時テーブル #t3 に配置します。2 番目のクエリは、それらを #t3 から #t2 に配置します。

SELECT t.MyGroup, t.FSGRoup, t.Account, t.BrokerCode, t.AccountType, t.NewInvestmentType, t.AccountOrder, t.LPI, t.LPII, t.LPIII
INTO #t3
FROM #t t
LEFT OUTER JOIN #t2 t2
ON t.MyGroup = t2.MyGroup AND t.FSGRoup = t2.FSGRoup AND t.Account = t2.Account AND t.BrokerCode = t2.BrokerCode AND t.AccountType = t2.AccountType AND t.NewInvestmentType = t2.NewInvestmentType AND t.AccountOrder = t2.AccountOrder
WHERE t2.MyGroup IS NULL 
/*Assuming that MyGroup can't be null.  If it can, use a column that can't.*/

INSERT INTO #t2
SELECT MyGroup, FSGRoup, Account, BrokerCode, AccountType, NewInvestmentType, AccountOrder, LPI, LPII, LPIII
FROM #t3
于 2013-10-04T20:23:35.523 に答える
0

マージは優れたソリューションですが、挿入、更新、削除などの複数の操作を一度に実行する場合に推奨されます。ここでの要件は、 #ta simple に属さない #t から #t2 にデータを挿入することなので、

insert into #t2(
MyGroup, FSGRoup, Account, BrokerCode, AccountType, NewInvestmentType, AccountOrder, LPI, LPII, LPIII)

select MyGroup, FSGRoup, Account, BrokerCode, AccountType, NewInvestmentType, AccountOrder, LPI, LPII, LPIII from #t 
except
select MyGroup, FSGRoup, Account, BrokerCode, AccountType, NewInvestmentType, AccountOrder, LPI, LPII, LPIII from #t2

これは、以前に投稿された他の 2 つのソリューションよりもはるかに効率的で信頼性があります。

于 2013-10-05T17:41:05.100 に答える
0

あなたがSQL 2008+を使用していると仮定すると、これはまさにマージコマンドの目的です(とりわけ)

簡単な説明については、マージの使用に関するこの質問を確認してください。少し検索すると、さらに多くのことがわかります。ただし、MS のドキュメントは少しわかりにくいです。

追加した

めちゃめちゃ、このリンクもマージの基本に関する素晴らしい記事に含めることを意味しました。

于 2013-10-04T19:42:32.203 に答える