WITH RECOMPILE 在设置参数后的存储过程中

WITH RECOMPILE in stored procedure after setting parameters

我想在声明的参数填充值后在存储过程中使用 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。之后 table 被多个语句更新,并在其他 table 上进行连接。最后 table.

上有一个 SELECT

正确的做法是什么?
使用 WITH RECOMPILE 还是 OPTION(RECOMPILE)

会更好

请帮助我。

我总是说,只要你有资源(包括时间、金钱、知识等等),一切皆有可能。这种情况也不例外。为了使用这种格式,您需要做的就是设计和开发您自己的语言,因为这种格式不是有效的 Transact SQL 格式。

你的问题就像问我如何计算 1+1 并得到 3。答案是建立你自己的数学,因为它不适合通用的数学语言。

如果我正确理解了您的需求(而不是请求),那么您可以通过从另一个存储过程执行一个存储过程来获得所需的东西。

您可以编写配置参数的过程 X,此过程 X 将执行使用 WITH RECOMPILE

配置的过程 Y

这应该有效:

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

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