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

首先准备两个函数(网上看到别人写的,照搬,在数据库中运行):

第一个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

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

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


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

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      




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值