Just to toss my hat in the ring...
create procedure dbo.usp_permutate
@charset nvarchar(256) = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
as
set nocount on
-- a set of all values in the charset
create table #set ( k int, v nchar(1) )
declare @i int, @C nvarchar(5)
declare @select nvarchar(4000)
declare @from nvarchar(4000)
select
@i = 1
, @select = 's1.v '
, @from = '#set s1 '
insert into #set ( k, v ) values ( 1, substring(@charset, @i, 1) )
while @i < len(@charset) begin
set @i = @i + 1
set @C = convert(nvarchar(5), @i)
insert into #set ( k, v ) values ( 1, substring(@charset, @i, 1) )
set @select = @select + '+ s' + @C + '.v '
set @from = @from + 'join #set s' + @C + ' on s' + @C + '.k = s1.k '
end
-- output query
exec( 'select ' + @select + 'as permutation from ' + @from + 'order by permutation' )
-- clean up
drop table #set