Evi*_*lDr 5 t-sql sql-server sql-server-2012
我需要在SQL Server 2012过程中执行以下伪逻辑,基于表变量和声明为这样的表:
DECLARE @tmp TABLE
(
ID int IDENTITY(1,1),
UserID int NOT NULL,
SgsID int NOT NULL
)
CREATE TABLE #Table1
(
ID int IDENTITY(1,1),
UserID int NOT NULL,
SgsID int NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
@tmp
Table1
,其中UserID/SgsID
组合匹配UserID/SgsID
的Table1
UserID/SgsID
从@tmp
已删除的组合中删除这些组合Table1
我一直在研究不同的方法,比如使用OUTPUT INTO
和INTERSECT
,但是不能编写一个删除两个表的查询(实际上我认为它甚至不可能).
我已经通过使用以下代码实现了上述步骤,但是,我想知道是否有任何T-SQL专业人员可以建议更简洁/有效的方法?
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
253 次 |
最近记录: |