在一个会话中可以使用多少个嵌套交易和嵌套的嵌套交易。
出现是375。
DECLARE @SQL nvarchar(MAX);
WITH N AS(
SELECT N
FROM (VALUES(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL))N(N)),
Tally AS(
SELECT TOP 375 ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) -1 I
FROM N N1, N N2, N N3)
SELECT @SQL = STUFF((SELECT NCHAR(13) + NCHAR(10) + REPLICATE(' ',T.I) + CONVERT(nvarchar(MAX),N'BEGIN TRY') + NCHAR(13) + NCHAR(10) + REPLICATE(' ',T.I+1 )+ N'SELECT 1;'
FROM Tally T
ORDER BY T.I
FOR XML PATH(''),TYPE).value('.','nvarchar(MAX)'),1,2,N'') + NCHAR(13) + NCHAR(10) +
STUFF((SELECT NCHAR(13) + NCHAR(10) +REPLICATE(' ',T.I) + N'END TRY' + NCHAR(13) + NCHAR(10) + REPLICATE(' ',T.I) + CONVERT(nvarchar(MAX),N'BEGIN CATCH')+ NCHAR(13) + NCHAR(10) + + REPLICATE(' ',T.I+1) + N'SELECT 2;' + NCHAR(13) + NCHAR(10) + + REPLICATE(' ',T.I) + N'END CATCH'
FROM Tally T
ORDER BY T.I DESC
FOR XML PATH(''),TYPE).value('.','nvarchar(MAX)'),1,2,N'')
--PRINT @SQL;
EXEC sp_executesql @SQL;
但是,如果将其更改为TOP 376
,您会收到错误:
msg 191,第15级,状态1,第755行
SQL语句的某些部分嵌套得太深了。重写查询或将其分解为较小的查询。