我正在编写一个冗长的查询系统,它利用 CTE 构建有效的 SQL。即使是一个简单的系统,它也有可能创建多达一千个表达式,我担心我将来可能会遇到限制,不得不重新设计系统。
我搜索了高低,但我找不到答案。我想知道的是:
CTE 中允许的最大表达式数是多少?
注意:我没有使用递归。
我最好的猜测是我受到每批允许的字符数的限制(请参阅SQL Server 查询的最大大小?IN 子句?有更好的方法)
编辑
测试代码如下。我的开发机器奇怪地停在了 600 处。
DECLARE @i int = 1, @q varchar(max);
SET @q = 'WITH[0]AS(SELECT 1 AS c)'
WHILE @i < 600
BEGIN
SET @q = @q + ',[' + CONVERT(varchar, @i) + ']AS(SELECT * FROM[' + CONVERT(varchar, @i-1) + '])';
SET @i = @i + 1;
END;
SET @q = @q + 'SELECT * FROM[' + CONVERT(varchar, @i-1) + ']';
EXEC (@q);
我会看看如何在生产服务器上进行测试,但这需要一段时间。