【发布时间】:2010-11-14 16:20:25
【问题描述】:
我想删除一些 (6) 表中具有相同字段值集的许多行。我可以通过删除每个表中的一个子查询的结果来做到这一点(解决方案 1),这将是多余的,因为子查询每次都是相同的;所以我想将子查询的结果存储在一个临时表中,并删除表中每一行(临时表的)的值(解决方案 2)。哪种解决方案更好?
第一个解决方案:
DELETE FROM dbo.SubProtocols
WHERE ProtocolID IN (
SELECT ProtocolID
FROM dbo.Protocols
WHERE WorkplaceID = @WorkplaceID
)
DELETE FROM dbo.ProtocolHeaders
WHERE ProtocolID IN (
SELECT ProtocolID
FROM dbo.Protocols
WHERE WorkplaceID = @WorkplaceID
)
// ...
DELETE FROM dbo.Protocols
WHERE WorkplaceID = @WorkplaceID
第二种解决方案:
DECLARE @Protocols table(ProtocolID int NOT NULL)
INSERT INTO @Protocols
SELECT ProtocolID
FROM dbo.Protocols
WHERE WorkplaceID = @WorkplaceID
DELETE FROM dbo.SubProtocols
WHERE ProtocolID IN (
SELECT ProtocolID
FROM @Protocols
)
DELETE FROM dbo.ProtocolHeaders
WHERE ProtocolID IN (
SELECT ProtocolID
FROM @Protocols
)
// ...
DELETE FROM dbo.Protocols
WHERE WorkplaceID = @WorkplaceID
是否可以在没有子查询的情况下执行解决方案 2?说做WHERE ProtocolID IN @Protocols(但语法正确)?
我正在使用 Microsoft SQL Server 2005。
【问题讨论】:
标签: sql sql-server sql-server-2005