基于@MikaelEriksson的回答和@MartinSmith对我的初始评论的回答而产生的变化:
declare @S char(26);
set @S = 'create table x(i int)';
exec (@S);
最初,我试图做一个WHILE语句,但是我能做的最好的是27个字符:
set @S = 'while 1=1 insert t select 0'; -- fails at 27 characters
exec (@S);
但马丁指出GOTO:
set @S = 'x:insert t select 0 GOTO x';
exec (@S);
GOTO ...万恶的根源和26个字符的无限循环插入语句的创建者。
话虽如此...坚持使用CHAR(99)而不是int可能是有利的,因为那样会占用更多空间。其他选项要么使用更长的名称,要么破坏26个字符的限制……或者每行使用更少的存储空间。
完整的测试代码:
declare @S char(26);
set @S = 'drop table t;';
exec (@S);
GO
declare @S char(26);
set @S = 'create table t(c CHAR(99))';
exec (@S);
set @S = 'x:insert t select 0 GOTO x';
exec (@S);
GO