您的位置:首页 > 数据库

向数据库插入使用分隔符分隔(任意分隔符)的字符串脚本

2016-07-20 11:31 274 查看
首先准备两个函数(网上看到别人写的,照搬,在数据库中运行):

第一个function:(赋值粘贴,并运行一下所有)

/*

Desc:按指定符号分割字符串,返回分割后的元素个数

Author:LHB

UpdateDate:2016-06-28 16:20

*/

ALTER function [dbo].[Get_StrArrayLength]

(

 @str nvarchar(max),  --要分割的字符串

 @split varchar(10)  --分隔符号

)

returns int

as

 begin

  declare @location int

  declare @start int

  declare @length int

  set @str=ltrim(rtrim(@str))

  set @location=charindex(@split,@str)

  set @length=1

   while @location<>0

     begin

      set @start=@location+1

      set @location=charindex(@split,@str,@start)

      set @length=@length+1

     end

   return @length

 end

 --------------------------------------------------------------------------------------------------------

第一个function:(赋值粘贴,并运行一下所有)

/*

Desc:按指定符号分割字符串,返回分割后的元素个数

Author:LHB

UpdateDate:2016-06-28 16:20

*/

ALTER function [dbo].[Get_StrArrayStrOfIndex]

(

 @str nvarchar(max),  --要分割的字符串

 @split varchar(10),  --分隔符号

 @index int --取第几个元素

)

returns nvarchar(max)

as

begin

 declare @location int

 declare @start int

 declare @next int

 declare @seed int

 set @str=ltrim(rtrim(@str))

 set @start=1

 set @next=1

 set @seed=len(@split)

 set @location=charindex(@split,@str)

 while @location<>0 and @index>@next

   begin

    set @start=@location+@seed

    set @location=charindex(@split,@str,@start)

    set @next=@next+1

   end

 if @location =0 select @location =len(@str)+1

--这儿存在两种情况:1、字符串不存在分隔符号 2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。

 return substring(@str,@start,@location-@start)

end

-----------------------------------
4000
-----------------------------------


最后根于跟定的字符串,拆分字符串,循环插入(自己修改);

----先查询表中是否存在这些标签(只是看一下,这部可以没有)

SELECT * FROM a_inf_CloudTags AS aict WHERE aict.ITName IN 

('股权众筹','p2p','互联网金融','京东众筹','36氪','苏宁众筹','VR','万科','李彦宏','雷军','Uber','马云','王思聪','微信支付',' papi酱')

ORDER BY OrderIndex

--根据网上找的分隔字符串函数,进行改造我们自己的sql(嘎嘎,居然成功了),如果标签存在表中,则修改,排列顺序,如果不存在,则插入标签

DECLARE @ITName NVARCHAR(50)

DECLARE @IDs NVARCHAR(4000) 

SET @IDs='股权众筹,p2p,互联网金融,京东众筹,36氪,苏宁众筹,VR,万科,李彦宏,雷军,Uber,马云,王思聪,微信支付, papi酱';

SET @IDs=ltrim(rtrim(@IDs))--对传入的字符串去除两头的空格(要分割的字符串)

                      --

DECLARE @split NVARCHAR(1)--分隔符号

DECLARE @next INT  --

                          

SET @split=','

---循环插入标签

 IF(len(@IDs)>0)

 BEGIN
SET  @next=1
WHILE  @next<=dbo.Get_StrArrayLength(@IDs,@split)
BEGIN
--获取标签名称
SET @ITName= dbo.Get_StrArrayStrOfIndex(@IDs,',',@next) ----输出数组中的值
                                                        --
--判断假如存在标签,则修改,否则插入
IF  EXISTS
(
SELECT 1 FROM dbo.a_inf_CloudTags AS aic
WHERE aic.ITName = @ITName
)
--修改标签
BEGIN
UPDATE  dbo.a_inf_CloudTags
 SET [OrderIndex]=@next,
 [UpdateDate]=GETDATE()
WHERE ITName=@ITName
END 

ELSE

    --插入权限

    BEGIN
INSERT INTO dbo.a_inf_CloudTags
 ([CTID]
 ,[ITName]
 ,[AppearNumber]
 ,[Highlight]
 ,[IsShow]
 ,[OrderIndex]
 ,[UpdateUserID]
 ,[UpdateDate]
 ,[CreatedUserID]
 ,[CreateDate]
 )
VALUES
 (NEWID()
 ,@ITName
 ,1
 ,1
 ,1
 ,@next
 ,1
 ,GETDATE()
 ,1
 ,GETDATE())

    END

    SET  @next+=1
END

END      
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: