Tsql 存储过程中where子句的最大数量

Tsql 存储过程中where子句的最大数量,tsql,sql-server-2008,stored-procedures,Tsql,Sql Server 2008,Stored Procedures,我和我的同事对SQL Server 2008查询长度和SQL Server优化器有一个问题 我们计划生成一些可能有很多参数的存储过程。在存储过程中,我们只需从连接其他表的表中选择一些值 我们的存储过程如下所示 CREATE PROCEDURE QueryTable @Parameter001 nvarchar(20), @Parameter002 int, @Parameter003 datetime, @Parameter004 decimal(11,2), @Parameter005 dat

我和我的同事对SQL Server 2008查询长度和SQL Server优化器有一个问题

我们计划生成一些可能有很多参数的存储过程。在存储过程中,我们只需从连接其他表的表中选择一些值

我们的存储过程如下所示

CREATE PROCEDURE QueryTable
@Parameter001 nvarchar(20),
@Parameter002 int,
@Parameter003 datetime,
@Parameter004 decimal(11,2),
@Parameter005 date,
@Parameter006 varchar(150),
@Parameter007 int,
@Parameter008 decimal(5,2),
@Parameter009 nvarchar(10),
@Parameter010 nvarchar(200),
@Parameter011 nvarchar(50) --,
--...and so on, there are probably 50 to 100 parameters here

AS
BEGIN
SET NOCOUNT ON;

SELECT ID, COL01, COL02, COL03, COL04, COL05 from TestTable T
LEFT JOIN AnotherTable A On T.SomeColomn = A.SomeColumn
LEFT JOIN AThirdTable ATT On A.ThirdTableID = ATT.Id
--and so on, probably 5-10 Tables joined here
WHERE 
      T.Col02 = @Parameter001 AND
      T.Col05 = @Parameter004 AND
      ATT.SomeColumnContainingData = @Parameter027
      A.AnotherID = @Parameter050
      --probably 50 to 100 conditions here (Number of conditions equals number of parameters)
END
GO
我们的问题: 查询优化器和SQL Server缓存可以考虑的where条件数量是否有限制?
如果没有这样的技术限制,是否有关于在这种情况下可以和应该使用多少条件的最佳实践?

SQL Server联机丛书有一个实施限制列表,包括查询方面。是SQL Server 2005的列表。

SQL Server联机丛书有一个实现限制列表,包括查询方面。是SQL Server 2005的列表。

限制WHERE子句的数量不会成为您的问题

可能会缓存参数嗅探和较差(或不正确)的查询计划

这可以通过使用


显然,WHERE子句越简单越好

限制WHERE子句的数量不会成为您的问题

可能会缓存参数嗅探和较差(或不正确)的查询计划

这可以通过使用


显然,WHERE子句越简单越好

如果有人感兴趣


我们通过生成在服务器上执行的动态sql解决了这个问题。这样,只有在使用子句且语句相对较短的情况下才相关。

如果有人感兴趣

我们通过生成在服务器上执行的动态sql解决了这个问题。以这种方式,只使用相关的where子句,并且语句相对较短。

(“this”)是SQL Server 2008的链接。(“this”)是SQL Server 2008的链接。