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
GOdeclare @s nvarchar(20)
set @s=N'机械,五金,其他'
insert into chs.dbo.mall_product (ID, mall_PRODUCT_NAME) 
select @id,istr from uf_splitstring(@s,',')

解决方案 »

  1.   

    不行啊,干脆我直接把我成功的单个执行的代码贴上来,大家看如何进行循环更新啊:
    declare @pcname as nvarchar(100) --分类的名称!
    declare @maxmpcid as int --当前已有mall_product_category_id最大值+1
    declare @maxOid as int --当前已有同级DISPLAY_ORDER最大值+1
    declare @websiteid as int --当前站点的website_idset @pcname = N'机械'
    set @maxmpcid = ((select max(mall_product_category_id) from endiva_chs.dbo.mall_product_category)+1)
    set @maxOid = (select max(DISPLAY_ORDER) from endiva_chs.dbo.mall_product_category WHERE parent_category_id=1766)
    set @websiteid = (SELECT website_id FROM endiva_chs.dbo.COMPANY WHERE (WEBSITE_NAME = 'HN_PORTAL'))if @maxOid is null
    set @maxOid = 0;insert into endiva_chs.dbo.mall_product_category (WEBSITE_ID, mall_PRODUCT_CATEGORY_ID, mall_PRODUCT_CATEGORY_NAME, PARENT_CATEGORY_ID, ACTIVE_IND, DISPLAY_ORDER) values 
    (@websiteid, @maxmpcid, @pcname, 1766, N'Y', @maxOid+1);我想要将
    set @pcname = N'机械
    改为
    set @pcname = N'机械,五金,其他'
    从而实现批量更新,怎么做??多谢!!
      

  2.   

    ---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 其他
      

  3.   


    declare @pcname as nvarchar(100) --分类的名称!
    declare @maxmpcid as int --当前已有mall_product_category_id最大值+1
    declare @maxOid as int --当前已有同级DISPLAY_ORDER最大值+1
    declare @websiteid as int --当前站点的website_id
    --ADD 
    declare @s varchar(8000),@s2 varchar(8000),@p_name varchar(10), @i int
    set @s = N'机械,五金,其他'--set @pcname = N'机械'
    set @maxmpcid = ((select max(mall_product_category_id) from endiva_chs.dbo.mall_product_category)+1)
    set @maxOid = (select max(DISPLAY_ORDER) from endiva_chs.dbo.mall_product_category WHERE parent_category_id=1766)
    set @websiteid = (SELECT website_id FROM endiva_chs.dbo.COMPANY WHERE (WEBSITE_NAME = 'HN_PORTAL'))--ADD
    select @s = @s + ','if @maxOid is null
    set @maxOid = 0;
    begin
    while charindex(',',@s)>0
    begin
    select @s2 = substring(@s,0,charindex(',',@s))
     
    begin
    ---------begin insert
    insert into endiva_chs.dbo.mall_product_category (WEBSITE_ID, mall_PRODUCT_CATEGORY_ID, mall_PRODUCT_CATEGORY_NAME, PARENT_CATEGORY_ID, 
    ACTIVE_IND, DISPLAY_ORDER) values (@websiteid, @maxmpcid, @s2, 1766, N'Y', @maxOid+1);
    ---------end
    end
    select @s=right(@s,len(@s)-charindex(',',@s))
    print @s
    end
    end--  噢  =。= 噢
      

  4.   

    检查是不是字段长度不够,如declare 语句,是否忘写(20)了.