declare @keyword nvarchar(100)
declare @k varchar(23)
set @keyword = '裤子|衣服|鞋子|染彩'
while(charindex('|',@keyword) <> 0)
begin
   set @k = 'TS_KW_'+ replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','')
  + right(CONVERT(varchar(12) , getdate(), 114),3)
     PRINT @c
     set @keyword = stuff(@keyword,1,charindex('|',@keyword),'')
end打印出来的@c值都是一样。
循环是有先后顺序的。
难怪快成是在同一时间执行的。
再怎么快。总有先后顺序吧?

解决方案 »

  1.   

    print @c 改成 pirnt @K
      

  2.   

    declare @keyword nvarchar(100)
    declare @k varchar(23)
    set @keyword = '裤子|衣服|鞋子|染彩'
    IF RIGHT(@keyword,1)<>'|' SET @keyword=@keyword+'|'
    while(charindex('|',@keyword) <> 0)
    begin
       set @k = LEFT(@keyword,charindex('|',@keyword)-1) + replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','')
                                  + right(CONVERT(varchar(12) , getdate(), 114),3)
         PRINT @k
         set @keyword = stuff(@keyword,1,charindex('|',@keyword),'')
    end
    /*
    裤子20100723163540480
    衣服20100723163540480
    鞋子20100723163540480
    染彩20100723163540480
    */?
      

  3.   

    巧了,就是这么快,你一共才循环3次,mssql精确到千分之三毫秒
    它完全有能力在1ms里处理完这次循环
      

  4.   


    只是做唯一值的话,用标识列,结合timestamp不就好了
      

  5.   

    DECIMAL(38),可以存储38位的整数。
      

  6.   

    只是为了唯一标示? 不如用GUID好了。p.s. 如果是设计不合理,建议修改,长痛不如短痛,当你的系统再扩大发现要修改时,更烦