34,594
社区成员
发帖
与我相关
我的任务
分享
declare @name sysname
set @name = 'sysobjects'
-- 第1层
exec('select * from sys.system_objects where name='''+@name+'''')
-- 第2层
exec('exec(''select * from sys.system_objects where name='''''+@name+''''''')')
declare @name sysname
select @name = 'sysobjects'
declare @1 varchar(max) = ''
declare @2 varchar(max) = ''
declare @s varchar(max) = char(39) -- varchar(max) 否则 replicate(@s, 8192) = 8000
declare @q varchar(max)
select
-- varchar(max)最大2^31-1, number极限30, 加上N个exec溢出, 极限29
@1 = @1 + 'exec(' + replicate(@s, power(2,number)),
@2 = replicate(@s, power(2,number)) + ')' + @2
from
master..spt_values
where
type='P' and number between 0 and 14
-- 14以内无明显慢的感觉, 超过14开始感觉明显.
set @q = replicate(@s, power(2,@@rowcount))
-- number=29: 内嵌30个exec, 加上最外层共31层, 极限中的极限:
exec (@1+'select * from sys.system_objects where name='+@q+@name+@q+@2)