用户自定义函数代替游标进行循环拼接

首先,建立测试表,本例我们采用经典的Customer 1-->n Order结构,如下:

ExpandedBlockStart.gif 代码
USE  test
GO

IF   EXISTS  ( SELECT   1   FROM  sysobjects  WHERE  name  =   ' Orders ' )
    
DROP   TABLE  Orders
    
IF   EXISTS  ( SELECT   1   FROM  sysobjects  WHERE  name  =   ' Customers ' )
    
DROP   TABLE  Customers
    
/*
    Customer 1 --> n Order
*/

--  Create Customer Table
CREATE   TABLE  Customers
(
    CustomerId 
UNIQUEIDENTIFIER   PRIMARY   KEY ,
    Name 
VARCHAR ( 25 ),
)
GO


--  Create Order Table
CREATE   TABLE  Orders
(
    OrderId 
UNIQUEIDENTIFIER   PRIMARY   KEY ,
    Name 
VARCHAR ( 255 ),
    Customer_Id 
UNIQUEIDENTIFIER   FOREIGN   KEY   REFERENCES  Customers(CustomerId)
)
GO

 

 

然后,插入一些测试数据:

 

ExpandedBlockStart.gif 代码
--  insert test data for customers table
INSERT   INTO  Customers
VALUES ( ' 65DC24EF-BA13-4707-95B0-3D426C2FD0A0 ' , ' C1 ' )

INSERT   INTO  Customers
VALUES ( ' 32AA5A01-39B4-42D0-BEE9-9AF64171EB55 ' , ' C2 ' )
GO


--  insert test data for orders table
INSERT   INTO  Orders
VALUES ( ' 8EAA07D0-0E04-412A-8A60-3178C9C2E205 ' , ' O1 by C1 ' , ' 65DC24EF-BA13-4707-95B0-3D426C2FD0A0 ' )

INSERT   INTO  Orders
VALUES ( ' 78E0CDAB-A3FA-4317-9D4E-D884F91D41A8 ' , ' O2 by C2 ' , ' 32AA5A01-39B4-42D0-BEE9-9AF64171EB55 ' )

INSERT   INTO  Orders
VALUES ( ' D08038A9-94FB-4AFF-9E41-F8BEE0FD4384 ' , ' O3 by C1 ' , ' 65DC24EF-BA13-4707-95B0-3D426C2FD0A0 ' )

INSERT   INTO  Orders
VALUES ( ' 7487AE08-6313-4DB7-87D7-8F9204F07470 ' , ' O4 by C2 ' , ' 32AA5A01-39B4-42D0-BEE9-9AF64171EB55 ' )

INSERT   INTO  Orders
VALUES ( ' 49A76769-D074-4AF3-9707-751D34847E2A ' , ' O5 by C1 ' , ' 65DC24EF-BA13-4707-95B0-3D426C2FD0A0 ' )

INSERT   INTO  Orders
VALUES ( ' C5C055EB-49A7-4E4C-82EA-1DB10933C78D ' , ' O6 by C2 ' , ' 32AA5A01-39B4-42D0-BEE9-9AF64171EB55 ' )

GO

 

 

建立自定义函数:

 

ExpandedBlockStart.gif 代码
IF   EXISTS  ( SELECT   1   FROM  sysobjects  WHERE  name  =   ' fnGetCustomerOrders ' )
    
DROP   FUNCTION  fnGetCustomerOrders

CREATE   FUNCTION  fnGetCustomerOrders
(
    
@CustomerName   VARCHAR ( 25 )
)
    
RETURNS   VARCHAR ( MAX )

AS  

BEGIN
    
DECLARE   @result   VARCHAR ( MAX )
    
SET   @result   =   ''
    
SELECT   @result   =   @result   +   ' '   +  o.Name
    
from  Customers c  INNER   JOIN  Orders o
            
ON  c.CustomerId = o.Customer_Id
    
WHERE  c.Name = @CustomerName
    
ORDER   by  c.Name, o.Name

    
IF   @result   like   ' , % '
        
SET   @result   =   right ( @result len ( @result -   2 )

    
RETURN   @result
END

GO

 

 

测试函数:

 

--  test function
DECLARE   @customer_name   VARCHAR ( 25 )
SET   @customer_name = ' C1 '
SELECT   ' Orders By  '   +   @customer_name   +   ' '   +  dbo.fnGetCustomerOrders( @customer_name )

GO

 

 

结果如下:

Orders By C1: O1 by C1, O3 by C1, O5 by C1

 

 

转载于:https://www.cnblogs.com/davidgu/archive/2010/05/17/1737374.html

购物商城项目采用PHP+mysql有以及html+css jq以及layer.js datatables bootstorap等插件等开发,采用了MVC模式,建立一个完善的电商系统,通过不同用户的不同需求,进行相应的调配和处理,提高对购买用户进行配置….zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值