向数据库插入使用分隔符分隔(任意分隔符)的字符串脚本
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
第一个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
相关文章推荐
- 国内三大云数据库测试对比
- 安装mysql.so
- 理解数据库范式——通俗易懂
- oracle中sequence浅析
- Memcached的安装和应用
- C#中SqlParameter的作用与用法
- RedHat Enterprise 7.2(RHEL7)安装Oracle 12.X报compat-libstdc++包的解决办法
- mysql 父类子类查询
- Redis客户端开发包:Jedis学习-高级应用
- mongodb java driver3.0初探
- SQL自定义函数split分隔字符串
- 获取SqlServer存储过程定义的三种方法
- 常用的数据库索引优化语句总结
- mysql存储引擎概述
- 导mysql数据,遇到 longtext 类型,navicat导出会出现乱码
- redis数据类型Hash的常用命令
- sql server判断表是否存在
- Mysql用户管理及权限设置
- Mysql:四种常用的MySQL建表语句
- mysql 里面的isnull()和ifnull() is null 和 is not null