入住此...
IF OBJECT_ID('TableA') IS NOT NULL DROP TABLE TableA
IF OBJECT_ID('TableB') IS NOT NULL DROP TABLE TableB
CREATE TABLE TableA (ID INT, Color VARCHAR(max), Location VARCHAR(max), Class VARCHAR(max))
CREATE TABLE TableB (child_ID INT, parent_ID INT, Color VARCHAR(10), Location VARCHAR(10), Class VARCHAR(10))
INSERT INTO TableB
SELECT 1,1,'white','house' ,'I' UNION SELECT 2,2,'red' ,'garage' ,'II'
UNION SELECT 3,2,'white','garage' ,'I' UNION SELECT 4,3,'blue' ,'house' ,'IV'
UNION SELECT 5,3,'blue' ,'garage' ,'I' UNION SELECT 6,3,'white','garage' ,'I'
UNION SELECT 7,3,'gray' ,'garage' ,'I' UNION SELECT 8,2,'gray' ,'house' ,'IV'
SELECT * FROM TableB
DECLARE @cmd VARCHAR(max);
SET @cmd = 'INSERT INTO TableA SELECT ID = b.parent_id '
SELECT @cmd = @cmd + ' , ['+COLUMN_NAME+'] = STUFF(
( SELECT '', '' +'+COLUMN_NAME+'
FROM TableB
WHERE parent_id = b.parent_id
GROUP BY '+COLUMN_NAME+'
FOR XML PATH('''')
) , 1, 2, '''')'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='TableB' AND COLUMN_NAME NOT IN ('child_ID', 'parent_id')
SELECT @cmd = @cmd + ' FROM TableB AS b GROUP BY b.parent_id'
EXEC(@cmd)
SELECT * FROM TableA
/* -- OUTPUT
ID | Color | Location | Class
---------------------------------------------------
1 | white | house | I
2 | gray, red, white | garage, house | I, II, IV
3 | blue, gray, white | garage, house | I, IV
*/
有要将多个值存储在一个领域的原因是什么?它会使搜索特定记录的速度稍慢。 – 2011-05-18 00:17:38
只是要求保持数据平稳出口.. – 2011-05-18 00:22:20