sproc中的条件提示

时间:2012-06-08 22:43:09

标签: sql-server

其他复制sproc中的查询,有没有办法根据sproc参数指定提示?例如,使用参数@waitForLock,如果它设置为0,我想使用READPAST提示,否则等待/阻塞,直到另一个事务完成。

1 个答案:

答案 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