2017-05-25 62 views
1

我想調用存儲過程與整型變量@Mdop因此,在存儲過程中的查詢讀取類似:如何在SQL Server中的變量參數化的MAXDOP提示

SELECT someField 
FROM SomeTable 
OPTION (MAXDOP @Mdop) 

是否有如何做到這一點?我發現的唯一瑣碎方式具有巨型IF THEN ELSE,並且對於每個Maxdop值I計劃傳遞給存儲過程,重複具有不同maxdop值相同的查詢。我覺得這種方法很原始,但非常可怕。

其他想法?

+1

* *爲什麼你要指定這樣的MAXDOP?一臺機器上的核心數量不會從一個查詢變爲另一個查詢。這不是你應該在代碼中修改的東西,除非你完全確定它是需要的。通常情況下,DBA知道,而不是開發人員 –

回答

0

動態建立查詢,然後執行它。

+0

Thankx爲您的快速答案。是的,它肯定會工作,但不會失去存儲過程的好處嗎?我想我不能同時擁有這兩個,但我希望得到一個奇怪的語法或任何能讓我得到相同結果的東西。 –

1

您可以使用動態SQL這樣的:

DECLARE @MDOP1 INT = 1; 
DECLARE @MDOP2 INT = 4; 

DECLARE @SQLSTM1 NVARCHAR(4000) = 'SELECT someField FROM SomeTable OPTION (MAXDOP ' + CAST(@Mdop1 AS NVARCHAR) + ')'; 
DECLARE @SQLSTM2 NVARCHAR(4000) = 'SELECT someField FROM SomeTable OPTION (MAXDOP ' + CAST(@Mdop2 AS NVARCHAR) + ')'; 

EXEC sp_executesql @SQLSTM1; 
EXEC sp_executesql @SQLSTM2; 
相關問題