首页 > 解决方案 > 设置参数后存储过程中的 WITH RECOMPILE

问题描述

我想WITH RECOMPILE在声明的参数填充值后在存储过程中使用。我必须把它放在哪里?我想做这样的事情:

CREATE PROCEDURE sp_dosomething 
    @AdrID INT = '32' 
                    WITH RECOMPILE
AS
    SELECT @AdrID = SELECT MAX(ID) 
                    FROM Address
    INSERT INTO TempStreet
    SELECT Streetname FROM Workadress WHERE ID = @AdrID
    INSERT INTO TempStreet
    SELECT Streetname FROM Homeadress WHERE ID = @AdrID
    OPTION(RECOMPILE)

    UPDATE TempStreet Set
    FROM TempStreet inner join AditionalData1...

    UPDATE TempStreet Set
    FROM TempStreet inner join AditionalData2...

    SELECT * FROM TempStreet
GO

所以我想设置参数,然后每次执行时重新编译存储过程的其余部分的执行计划。

存储过程执行以下操作:
过程执行两个不同的 INSERT INTO a Table。之后,该表将通过多个语句与其他表上的连接进行更新。最后,该表上有一个 SELECT 。

什么是正确的方法?使用WITH RECOMPILE还是使用OPTION(RECOMPILE)
会更好吗

请帮我。

标签: sqlsql-servertsqlstored-procedures

解决方案


这应该有效:

CREATE PROCEDURE sp_dosomething_sub @AdrID INT
WITH RECOMPILE
AS
    Select Streetname from Workadress where ID = @AdrID
    Select Streetname from Homeadress where ID = @AdrID
GO

CREATE PROCEDURE sp_dosomething @AdrID INT = '32'
AS
    select @AdrID = Select max(ID) FROM Address
    EXEC sp_dosomething_sub @ArdID
GO

请注意,我并不是说这一定是一个好主意,我只是说它应该做你想做的事。这需要一些非常奇怪(或复杂)的情况才能成为一种理想的方法。


推荐阅读