开发中经常都会遇到批量添加一组数据,最好是通过一个存储过程搞定,这样才快,再加上里面的事务,数据才更稳定,但是SQL好像不支持数组,没有办法,每次遇到这些情况都要自已写方法来弄
我的作法一般是把哪组数据写成"123,151,11,58,13,295"这种类似的数据,以英文逗号分隔,然后再到存储过程里面分隔出来,再循环添加。
今天又要用到这个东西,懒了一下,问朋友要了一个,嘿嘿
程序代码
Create FUNCTION dbo.Split
(
@StringArray varchar(8000),
@Delimiter varchar(50)
)
RETURNS @StringArrayTable table(Serial int identity(1,1), val varchar(100))
AS
BEGIN
DECLARE @Pos int
IF(RIGHT(@StringArray,1) <> @Delimiter)
SET @StringArray = @StringArray + @Delimiter
WHILE CHARINDEX(@Delimiter,@StringArray) <> 0
BEGIN
Select @Pos = CHARINDEX(@Delimiter,@StringArray)
Insert @StringArrayTable(val) VALUES(LEFT(@StringArray,@Pos-1))
SET @StringArray = STUFF(@StringArray,1,@Pos,'')
END
RETURN
END
用法:
程序代码
select * from Split(123,151,11,58,13,295',',')
我的作法一般是把哪组数据写成"123,151,11,58,13,295"这种类似的数据,以英文逗号分隔,然后再到存储过程里面分隔出来,再循环添加。
今天又要用到这个东西,懒了一下,问朋友要了一个,嘿嘿
程序代码Create FUNCTION dbo.Split
(
@StringArray varchar(8000),
@Delimiter varchar(50)
)
RETURNS @StringArrayTable table(Serial int identity(1,1), val varchar(100))
AS
BEGIN
DECLARE @Pos int
IF(RIGHT(@StringArray,1) <> @Delimiter)
SET @StringArray = @StringArray + @Delimiter
WHILE CHARINDEX(@Delimiter,@StringArray) <> 0
BEGIN
Select @Pos = CHARINDEX(@Delimiter,@StringArray)
Insert @StringArrayTable(val) VALUES(LEFT(@StringArray,@Pos-1))
SET @StringArray = STUFF(@StringArray,1,@Pos,'')
END
RETURN
END
用法:
程序代码select * from Split(123,151,11,58,13,295',',')
文章来自:
Tags: