日期:2014-05-18  浏览次数:20353 次

批量更新的难题,求教.
如何批量更新啊,比如单个执行
declare   @s   nvarchar(20)
set   @s=N '机械 '
insert   into   chs.dbo.mall_product   (ID,   mall_PRODUCT_NAME,)   values  
(@id,   @s);
结果是成功的,但假如要先插入记录 "机械 ",再插入记录 "五金 ",这些要插入的是一字符串,以逗号隔开的,如: "机械,五金,其他 "

用什么循环语句啊?多谢!



------解决方案--------------------
CREATE function uf_splitstring
(
@str varchar(8000) --要分拆的字符串
,@spli varchar(10) --字符串分隔符
)
returns @retab table(istr varchar(8000))
as
begin
declare @i int
declare @splen int
select @splen=len(@spli),@i=charindex(@spli,@str)
while @i > 0
begin
insert into @retab
values(left(@str,@i-1))
select @str=substring(@str,@i+@splen,8000)
select @i=charindex(@spli,@str)
end
if @str <> ' ' insert into @retab values(@str)
return
end
GO

declare @s nvarchar(20)
set @s=N '机械,五金,其他 '
insert into chs.dbo.mall_product (ID, mall_PRODUCT_NAME)
select @id,istr from uf_splitstring(@s, ', ')
------解决方案--------------------
---create table
create table split
(
sid int identity(1,1),
a varchar(10)
)
select * from split
--执行
declare @s varchar(8000),@s2 varchar(8000),@p_name varchar(10), @i int
select @s = '机械,五金,轴承,其他 '
select @s = @s + ', '

begin
while charindex( ', ',@s)> 0
begin
select @s2 = substring(@s,0,charindex( ', ',@s))

begin
insert into split(a) values
(@s2);
end
select @s=right(@s,len(@s)-charindex( ', ',@s))
print @s
end
end

--结果
1 机械
2 五金
3 轴承
4 其他
------解决方案--------------------
检查是不是字段长度不够,如declare 语句,是否忘写(20)了.