SQL While And Sql Array
SQL While循环:
DECLARE @whileStr varchar(200),@itemArray VARCHAR(200),@mark CHAR(1) SET @whileStr='1,12,1003,100|2,13,1004,101|3,14,1005,102' --SET @whileStr='4,11,1000,100|' SET @mark=',' WHILE(1=1) BEGIN --获取当前需要项 exec proc_getArrayItem '|',@whileStr OUTPUT,@itemArray OUTPUT --业务逻辑 proc_getArrayItem接收的参数是字符串类型,但是我们可以把变量定义成需要的类型,它会自动转换 declare @ItemID INT,@D3_BuyCount INT,@D3_TotalStock INT,@D3_DailyStock INT exec proc_getArrayItem @mark,@itemArray OUTPUT,@ItemID OUTPUT/*获取第1项*/ exec proc_getArrayItem @mark,@itemArray OUTPUT,@D3_BuyCount OUTPUT/*获取第2项*/ exec proc_getArrayItem @mark,@itemArray OUTPUT,@D3_TotalStock OUTPUT/*获取第3项*/ exec proc_getArrayItem @mark,@itemArray OUTPUT,@D3_DailyStock OUTPUT/*获取第4项*/ SELECT @ItemID,@D3_BuyCount,@D3_TotalStock,@D3_DailyStock --如果已完则退出循环 IF(LEN(@whileStr)=0)BREAK END
获取数组元素:
if exists(select * from sysobjects where [name]='proc_getArrayItem') drop proc proc_getArrayItem GO /* *获取数组项,通过输出参数返回。同时将字符串数组的已获取项删除,并以输出参数将新数组返回。 @arrayStr是个以@mark符号分隔的字符串数组。 *@arrayItem接收的参数是字符串类型,但是我们可以把客户端变量定义成需要的类型,它会自动转换。 * */ CREATE PROC proc_getArrayItem ( @mark VARCHAR(10)=',', @arrayStr VARCHAR(1000)='' OUTPUT, @arrayItem VARCHAR(100)='' OUTPUT ) AS DECLARE @tokenIndex INT SET @tokenIndex=CHARINDEX(@mark,@arrayStr) IF(@tokenIndex=0) BEGIN SET @arrayItem=SUBSTRING(@arrayStr,1,LEN(@arrayStr)) SET @arrayStr='' END ELSE BEGIN SET @arrayItem=SUBSTRING(@arrayStr,1,@tokenIndex-1) SET @arrayStr=SUBSTRING(@arrayStr,@tokenIndex+1,LEN(@arrayStr)) END GO