【问题标题】:How to parametrize the MAXDOP hint with a variable in SQL Server如何在 SQL Server 中使用变量参数化 MAXDOP 提示
【发布时间】:2017-05-25 07:42:57
【问题描述】:

我想调用一个带有整数变量@Mdop 的存储过程,以便存储过程中的查询读取如下内容:

SELECT someField 
FROM SomeTable 
OPTION (MAXDOP @Mdop)

有没有办法做到这一点?我发现的唯一简单方法是拥有一个巨大的IF THEN ELSE,并且对于我计划传递给存储过程的每个Maxdop 值,使用不同的maxdop 值重复相同的查询。我觉得这种方法很新颖,但很可怕。

其他想法?

【问题讨论】:

  • 为什么你要这样指定MAXDOP?机器上的核心数量不会从一个查询更改为另一个查询。它也不是你应该在代码中修改的东西,除非你绝对确定它是需要的。通常,知道这一点的是 DBA,而不是开发人员

标签: sql-server tsql hints


【解决方案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;

【讨论】:

    【解决方案2】:

    动态构建您的查询,然后执行它。

    【讨论】:

    • 感谢您的快速答复。是的,它肯定会起作用,但我不会失去拥有存储过程的好处吗?我想我不能两者兼得,但我希望有一种奇怪的语法或任何能让我得到相同结果的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 2018-07-28
    相关资源
    最近更新 更多