• 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