其他复制sproc中的查询,有没有办法根据sproc参数指定提示?例如,使用参数@waitForLock
,如果它设置为0,我想使用READPAST
提示,否则等待/阻塞,直到另一个事务完成。
答案 0 :(得分:1)
一般来说,我喜欢OPTION RECOMPILE
建议,但这意味着它会每次重新编译,即使统计信息或参数没有改变。这通常是为了阻止参数嗅探,对于你想避免或不避免锁定的情况没有帮助。
一个想法是使用动态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