测试数据:CREATE TABLE #ToJoin(
TableName varchar(20) NOT NULL,
ColumnName varchar(20) NOT NULL,
PRIMARY KEY CLUSTERED(TableName,ColumnName))
GOCREATE TABLE #ToSplit(
TableName varchar(20) NOT NULL PRIMARY KEY CLUSTERED,
ColumnNames varchar(max) NOT NULL)
GOINSERT INTO #ToJoin VALUES(''tblEmployee'',''EmployeeCode'')
INSERT INTO #ToJoin VALUES(''tblEmployee'',''EmployeeName'')
INSERT INTO #ToJoin VALUES(''tblEmployee'',''HireDate'')
INSERT INTO #ToJoin VALUES(''tblEmployee'',''JobCode'')
INSERT INTO #ToJoin VALUES(''tblEmployee'',''ReportToCode'')
INSERT INTO #ToJoin VALUES(''tblJob'',''JobCode'')
INSERT INTO #ToJoin VALUES(''tblJob'',''JobTitle'')
INSERT INTO #ToJoin VALUES(''tblJob'',''JobLevel'')
INSERT INTO #ToJoin VALUES(''tblJob'',''DepartmentCode'')
INSERT INTO #ToJoin VALUES(''tblDepartment'',''DepartmentCode'')
INSERT INTO #ToJoin VALUES(''tblDepartment'',''DepartmentName'')
GOINSERT INTO #ToSplit VALUES(''tblDepartment'',''DepartmentCode,DepartmentName'')
INSERT INTO #ToSplit VALUES(''tblEmployee'',''EmployeeCode,EmployeeName,HireDate,JobCode,ReportToCode'')
INSERT INTO #ToSplit VALUES(''tblJob'',''DepartmentCode,JobCode,JobLevel,JobTitle'')
GO拼接(Join),SQL Server 2005的FOR XML扩展可以将一个列表转成一个字串:SELECT
t.TableName,
ColumnNames = STUFF(
(SELECT '','' + c.ColumnName
FROM #ToJoin c
WHERE c.TableName = t.TableName
FOR XML PATH('''')),
1,1,'''')
FROM #ToJoin t
GROUP BY t.TableName
切分(Split),使用SQL Server 2005对XQuery的支持:SELECT
t.TableName,
ColumnName = c.ColumnName.value(''.'',''varchar(20)'')
FROM (
SELECT
TableName,
ColumnNamesXML = CAST(''<Root>'' + REPLACE((SELECT ColumnName = ColumnNames FOR XML PATH('''')),'','',''</ColumnName><ColumnName>'') + ''</Root>'' AS xml)
FROM #ToSplit
) t
CROSS APPLY t.ColumnNamesXML.nodes(''/Root/ColumnName'') c(ColumnName)