--创建范例数据库 CREATEDATABASE DEMO GO USE DEMO GO --创建两个表 CREATETABLE Computer(ID INT,ComputerName NVARCHAR(10)) GO CREATETABLE IPAddress(ComputerID INT,IPAddress NVARCHAR(20)) GO --增加10笔记算机记录,每个计算机增加2个IP地址 DECLARE@IINT SET@I=1; WHILE(@I<10) BEGIN INSERTINTO Computer VALUES(@I,'Computer'+CONVERT(NVARCHAR(2),@I)) INSERTINTO IPAddress VALUES(@I,'IPAddress '+CONVERT(NVARCHAR(2),@I)) INSERTINTO IPAddress VALUES(@I,'IPAddress '+CONVERT(NVARCHAR(2),@I+1)) SET@I=@I+1 END GO --查看两个表的资料 SELECT*FROM Computer SELECT*FROM IPAddress --合并查看两个表单资料 SELECT C.*,I.*FROM Computer C JOIN IPAddress I ON C.ID=I.ComputerID --创建函数来处理字符串的合并 CREATEFUNCTION SumString(@IDINT,@DismemberNVARCHAR(10)) RETURNSNVARCHAR(1000) AS BEGIN DECLARE IPCursor CURSORFOR SELECT IPAddress FROM IPAddress WHERE ComputerID=@ID DECLARE@RESULTNVARCHAR(1000) DECLARE@IPNVARCHAR(20) SET@RESULT=N'' OPEN IPCursor FETCHNEXTFROM IPCursor INTO@IP WHILE@@FETCH_STATUS=0 BEGIN IF(@RESULT=N'') SET@RESULT=@IP ELSE SET@RESULT=@RESULT+@Dismember+@IP FETCHNEXTFROM IPCursor INTO@IP END CLOSE IPCursor DEALLOCATE IPCursor RETURN@RESULT END GO --最后做联合查询显示,其实这个时候已经用不着第二个表了 SELECT ID,ComputerName,dbo.SumString(ID,N',') AS IPAddressList FROM Computer GROUPBY ID,ComputerName