數據我需要在SQL Server 2012程序執行以下僞邏輯,基於一個表變量和一個表聲明爲這樣:刪除「等效」從兩個表
- 對於每一行在表變量數據的
@tmp
- 從
Table1
刪除行,其中UserID/SgsID
組合在Table1
- 匹配
UserID/SgsID
刪除那些UserID/SgsID
共從@tmp
mbinations已經從Table1
我一直在研究不同的方法,如使用OUTPUT INTO
和INTERSECT
刪除,但不能寫在兩個表中刪除(其實查詢我不認爲這是甚至可能)。
我已經通過使用下面的代碼實現了上述步驟,但是,我想知道是否有任何T-SQL pro可能能夠提出更簡潔/高效的方法?
CREATE TABLE #Table1
(
ID int IDENTITY(1,1),
UserID int NOT NULL,
SgsID int NOT NULL
)
INSERT INTO #Table1 (UserID, SgsID) VALUES (5, 99)
INSERT INTO #Table1 (UserID, SgsID) VALUES (10, 89)
INSERT INTO #Table1 (UserID, SgsID) VALUES (150, 79)
INSERT INTO #Table1 (UserID, SgsID) VALUES (200, 69)
INSERT INTO #Table1 (UserID, SgsID) VALUES (250, 59)
SELECT * FROM #Table1
DECLARE @tmp TABLE
(
ID int IDENTITY(1,1),
UserID int NOT NULL,
SgsID int NOT NULL
)
INSERT INTO @tmp (UserID, SgsID) VALUES (150, 79)
INSERT INTO @tmp (UserID, SgsID) VALUES (200, 69)
INSERT INTO @tmp (UserID, SgsID) VALUES (250, 59)
INSERT INTO @tmp (UserID, SgsID) VALUES (999, 49)
SELECT * FROM @tmp
DECLARE @tbl_commonRows TABLE (UserID int, SgsID int)
INSERT INTO @tbl_commonRows
(
UserID,
SgsID
)
SELECT
UserID,
SgsID
FROM
#Table1
INTERSECT
SELECT
UserID,
SgsID
FROM
@tmp
DELETE FROM
#Table1
WHERE
(ID IN (
SELECT
ID
FROM
#Table1 t1 INNER JOIN
@tbl_commonRows c ON c.UserID = t1.UserID AND c.SgsID = t1.SgsID))
DELETE FROM
@tmp
WHERE
(ID IN (
SELECT
ID
FROM
@tmp t2 INNER JOIN
@tbl_commonrows c ON c.UserID = t2.UserID AND c.SgsID = t2.SgsID))
SELECT * FROM #Table1
SELECT * FROM @tmp
DROP TABLE #Table1
你能否舉一個例子來說明如何使用它?我認爲,因爲MERGE基於源表對目標表進行操作,因此在這裏不適用,因爲我們在源表和目標表上操作......? – EvilDr 2013-03-07 09:09:19
您可以通過使用output子句修改源表來擴展合併:http://stackoverflow.com/questions/7331725/how-to-delete-from-source-using-merge-command-in-sql- server-2008 – steoleary 2013-03-07 10:35:54
今天早上和MERGE一起玩過 - 我絕對喜歡它。多麼驚人的加法。與輸出合併是非常好的:-) – EvilDr 2013-03-08 11:48:17