MS_SQL 已知一组数据,请给出可返回所有可能的组合方式的函数

写一个SQL函数
从TB5中TB5Code 所维护的表中各取一个字符 组合成 XXXX 的形式,
组合的先后顺序 按照TB5中lat 的大小顺序

--测试数据 数据库版本为 MS SQL SEVER 2008 R2
 create table TB1(ID  INT  IDENTITY (1,1),TB1Code VARCHAR(20),PRIMARY KEY(TB1Code)); 
insert into  TB1(TB1Code) values('A'); 
insert into  TB1(TB1Code) values('B'); 
insert into  TB1(TB1Code) values('C'); 
create table TB2(ID  INT  IDENTITY (1,1),TB2Code VARCHAR(20),PRIMARY KEY(TB2Code)); 
insert into  TB2(TB2Code) values('1'); 
insert into  TB2(TB2Code) values('2'); 
insert into  TB2(TB2Code) values('3'); 
create table TB3(ID  INT  IDENTITY (1,1),TB3Code VARCHAR(20),PRIMARY KEY(TB3Code)); 
insert into  TB3(TB3Code) values('1'); 
insert into  TB3(TB3Code) values('2'); 
insert into  TB3(TB3Code) values('3'); 
create table TB4(ID  INT  IDENTITY (1,1),TB4Code VARCHAR(20),PRIMARY KEY(TB4Code)); 
insert into  TB4(TB4Code) values('1'); 
insert into  TB4(TB4Code) values('2'); 
insert into  TB4(TB4Code) values('3'); 
/* TB5Code 为表名 Lat 为排序的先后顺序 */
create table TB5(ID  INT  IDENTITY (1,1),TB5Code VARCHAR(20) NOT NULL ,Lat INT NOT NULL,PRIMARY KEY(TB5Code)); 
insert into  TB5(TB5Code,Lat) values('TB1',1); 
insert into  TB5(TB5Code,Lat) values('TB2',2); 
insert into  TB5(TB5Code,Lat) values('TB3',3); 
insert into  TB5(TB5Code,Lat) values('TB4',4); 

--DROP TABLE TB1
--DROP TABLE TB2
--DROP TABLE TB3
--DROP TABLE TB4
--DROP TABLE TB5

--/*得到的结果 是 
A111
A112
A113
A121
A122
.
.
C333
当然了 各个表的Code 字段的行数有可能自己手工增加。
*/

最好举个例子,别理解的意思和你表述的不一样

这个问题主要是排列和组合的问题,比较麻烦