Sql Server 中模拟数组

SQL Server 不支持数组参数,然而作为二维关系的“表”事实上不就是一个“数组”吗?
这里通过自定义函数分隔目标字符串,并作为表变量结果集返回。
自定义函数可以直接用在常见的 DML 语句中,如 SELECT。

对于某些多对多应用中,前端应用程序可以直接将的那边键连接成字符串,连同的那边的数据一次性传入存储过程,执行数据写入,不必在应用程序,遍历循环多次执行 Command。

使用示例

None.gif CREATE   PROCEDURE  dbo.usp_CreateProduct(
None.gif   
@ProductName   varchar ( 100 ),
None.gif   
@UnitPrice   money ,
None.gif   
@CategoryIds   varchar ( 4000 ),
None.gif   
@ProductID   int  output
None.gif
AS
None.gif
None.gif
SET  NOCOUNT  ON
None.gif
None.gif
--  写入产品数据
None.gif
INSERT  Product(ProductName, UnitPrice)
None.gifVALUE(
@ProductName @UnitPrice )
None.gif
--  获取产品ID
None.gif
SELECT   @ProductID   =   @@Identity
None.gif
None.gif
--  写入产品-种类关系表
None.gif--
 基于 INSERT INTO  SELECT 语法
None.gif
INSERT   INTO  ProductCategoryShip(ProductID, CategoryID)
None.gif
SELECT   @ProductID , Value  FROM  dbo.uf_Util_SplitStr( @CategoryID ' , ' --  分隔产品种类ID
None.gif

None.gif
SET  NOCOUNT  OFF


自定义函数

None.gif
ExpandedBlockStart.gifContractedBlock.gif
/**/ /*
InBlock.gif * 字符串分割,结果作为表变量返回
InBlock.gif * 示例: 
InBlock.gif *    SELECT Value FROM dbo.uf_Util_SplitStr('1,2,3,4,5,6', DEFAULT)
InBlock.gif *  SELECT Value FROM dbo.uf_Util_SplitStr('A;B;C;D;E;F', ';')
ExpandedBlockEnd.gif
*/

None.gif
ALTER   FUNCTION  dbo.uf_Util_SplitStr(
None.gif    
@Src   varchar ( 8000 ),
None.gif    
@Separator   varchar ( 10 =   null
None.gif)
None.gif
RETURNS   @Result   TABLE (VALUE  varchar ( 100 ))
None.gif
AS
None.gif
BEGIN
None.gif    
IF   @Separator   IS   NULL
None.gif        
SET   @Separator   =   ' , '
None.gif        
None.gif    
DECLARE   @i   int
None.gif    
SET   @Src   =   RTRIM ( LTRIM ( @Src ))
None.gif    
SET   @i   =   CHARINDEX ( @Separator , @Src )
None.gif    
WHILE   @i >= 1
None.gif    
BEGIN
None.gif        
--  插入新值
None.gif
         INSERT   @Result  
None.gif        
VALUES ( LEFT ( @Src @i - 1 ))
None.gif        
None.gif        
SET   @Src   =   SUBSTRING ( @Src @i   +   1 LEN ( @Src -   @i )
None.gif        
SET   @i   =   CHARINDEX ( @Separator @Src )
None.gif    
END
None.gif   
None.gif    
IF   @Src   <>   ''  
None.gif        
INSERT   @Result  
None.gif        
VALUES ( @Src )
None.gif   
None.gif   
RETURN
None.gif
END

转载于:https://www.cnblogs.com/Jinglecat/archive/2007/07/30/836980.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值