除了在 sproc 中复制查询之外,有没有办法根据 sproc 参数指定提示?例如,使用 parameter @waitForLock
,如果它设置为 0 我想使用READPAST
提示,否则等待/阻塞直到另一个事务完成。
问问题
233 次
1 回答
1
总的来说,我喜欢这个OPTION RECOMPILE
建议,尽管这意味着它每次都会重新编译,即使 stats 或你的参数没有改变。这通常是为了阻止参数嗅探,对于想要避免或不避免锁定的情况没有帮助。
一种想法是使用动态 SQL(这也可能是有益的,具体取决于您的“针对临时工作负载进行优化”设置以及使用一个参数或另一个参数运行的频率)。
CREATE PROCEDURE dbo.whatever
@waitForLock BIT = 1
AS
BEGIN
SET NOCOUNT ON;
DECLARE @sql NVARCHAR(MAX);
SET @sql = 'SELECT something FROM dbo.somewhere';
IF @waitForLock = 0
SET @sql = @sql + ' WITH (READPAST)';
SET @sql = ' WHERE <some condition> ...';
EXEC sp_executesql @sql;
END
GO
于 2012-06-08T23:01:50.513 回答