这可能是一个非常简单的问题,但我搜索答案的尝试被谷歌阻止,谷歌找到的答案展示了如何通过创建存储过程来重用查询。我想在存储过程中重用查询结果。
这是一个精简示例,其中我删除了 NOCOUNT
、XACT_ABORT
、TRANSACTION
、TRY
,以及大部分逻辑。
CREATE PROCEDURE Do_Something
@userId UNIQUEIDENTIFIER
AS
BEGIN
DELETE FROM LikedItems
WHERE likedItemId IN
(
SELECT Items.id FROM Items
WHERE Items.userId = @userId
)
DELETE FROM FollowedItems
WHERE followedItemId IN
(
SELECT Items.id FROM Items
WHERE Items.userId = @userId
)
END
重用重复嵌套SELECT
结果而不是执行两次的语法是什么?
最佳答案
您可以将 SELECT 的结果 INSERT 到临时表或表变量中,但这并不自动意味着整体性能会更好。您需要测量它。
临时表
CREATE PROCEDURE Do_Something
@userId UNIQUEIDENTIFIER
AS
BEGIN
CREATE TABLE #Temp(id int);
INSERT INTO #Temp(id)
SELECT Items.id
FROM Items
WHERE Items.userId = @userId;
DELETE FROM LikedItems
WHERE likedItemId IN
(
SELECT id FROM #Temp
)
DELETE FROM FollowedItems
WHERE followedItemId IN
(
SELECT id FROM #Temp
)
DROP TABLE #Temp;
END
表变量
CREATE PROCEDURE Do_Something
@userId UNIQUEIDENTIFIER
AS
BEGIN
DECLARE @Temp TABLE(id int);
INSERT INTO @Temp(id)
SELECT Items.id
FROM Items
WHERE Items.userId = @userId;
DELETE FROM LikedItems
WHERE likedItemId IN
(
SELECT id FROM @Temp
)
DELETE FROM FollowedItems
WHERE followedItemId IN
(
SELECT id FROM @Temp
)
END
关于sql - 在存储过程中重用 SELECT 查询的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35377887/