2009-08-19 11 views
2

を必要とします:T-SQLステートメントは、私が正しく機能(SQL 2000で)、次のT-SQLコードを持って改善

INSERT INTO M2MDATA01.dbo.cspopup (fcpopkey, 
            fcpoptext, 
            fcpopval, 
            fnorder, 
            fcpopacces) 
    SELECT CSP69.fcpopkey, 
      CSP69.fcpoptext, 
      CSP69.fcpopval, 
      CSP69.fnorder, 
      CSP69.fcpopacces 
    FROM M2MData69..CSPOPUP CSP69 
    WHERE CSP69.fcpopkey = 'SHIPVIA' 
      AND NOT EXISTS 
       (SELECT CS01.identity_column 
        FROM m2mdata01..cspopup CS01 
        WHERE CS01.identity_column = CSP69.identity_column) 

ちょうどそれを行うための、よりエレガントな方法がなければなりません。同じスクリプトで同じテーブルを2つの異なる方法で参照しています。

提案がありますか?

答えて

2

このようにしますか?

INSERT INTO M2MDATA01.dbo.cspopup (fcpopkey, 
            fcpoptext, 
            fcpopval, 
            fnorder, 
            fcpopacces) 
    SELECT CSP69.fcpopkey, 
      CSP69.fcpoptext, 
      CSP69.fcpopval, 
      CSP69.fnorder, 
      CSP69.fcpopacces 
    FROM M2MData69..CSPOPUP CSP69 
    LEFT 
    JOIN m2mdata01..cspopup CS01 
     ON CSP69.identity_column = CS01.identity_column 
    WHERE CSP69.fcpopkey = 'SHIPVIA' 
     AND CS01.indentity_column IS NULL 
2

ジョイン結果がnullであるところ左結合としてそれを行うことができます:

SELECT CSP69.fcpopkey, 
     CSP69.fcpoptext, 
     CSP69.fcpopval, 
     CSP69.fnorder, 
     CSP69.fcpopacces 
FROM M2MData69..CSPOPUP CSP69 
LEFT JOIN m2mdata01..cspopup CS01 on SC01.indentity_column = CSP69.identity_column 
WHERE CSP69.fcpopkey = 'SHIPVIA' 
     AND CS01.identity_column is null 

私の経験性能にコードのnice値よりも最終的な結果を駆動しますが。あなたはではないこともできます:

SELECT CSP69.fcpopkey, 
     CSP69.fcpoptext, 
     CSP69.fcpopval, 
     CSP69.fnorder, 
     CSP69.fcpopacces 
FROM M2MData69..CSPOPUP CSP69 
WHERE CSP69.fcpopkey = 'SHIPVIA' 
     AND CP69.identity_column not in 
(select identity_column from m2mdata01..cspopup) 
関連する問題