2009-08-19 190 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

喜欢这个?

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

你可以做它作为一个左连接在连接结果为空:

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 

虽然在我的经验表现将推动比代码的正派更多的最终结果。你也可以做一个不:

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)