SQLClr 切分中英文

注:必须先下载 sqlclr的dll文件, 配合脚本安装到库中。下载地址: 点击打开链接
--请注意!!!!!
--A. 请将 [master] 替换为当前库
--B. 请将主程序集的dll路径替换为当前库中的路径
--C. 出现错误:在 master 数据库中记录的数据库所有者 SID 与在数据库 'dbName' 中记录的数据库所有者 SID 不同。
--   应该通过使用 ALTER AUTHORIZATION 语句重置数据库 'db_Study' 的所有者来更正此情况。
--   Sp_changedbowner 'sa',true

USE [master]
GO
--1. 在SQL Server中启用CLR
exec sp_configure 'clr enabled', 1 
reconfigure;  
go  
--2. 在目标库 [master] 设置TRUSTWORTHY为ON
ALTER DATABASE [master] SET TRUSTWORTHY ON
--3. 删除主程序集已有对象db
IF OBJECT_ID('[dbo].[Fun_DBA_IsMatch]') IS NOT NULL
	DROP FUNCTION [dbo].[Fun_DBA_IsMatch]
GO
IF OBJECT_ID('[dbo].[Fun_DBA_IsChinese]') IS NOT NULL
	DROP FUNCTION [dbo].[Fun_DBA_IsChinese]
GO
IF OBJECT_ID('[dbo].[Fun_DBA_GetHTML]') IS NOT NULL
	DROP FUNCTION [dbo].[Fun_DBA_GetHTML]
GO
IF OBJECT_ID('Fun_SplitChineseAndEnglish') IS NOT NULL
	DROP FUNCTION Fun_SplitChineseAndEnglish
GO
--4. 删除主程序集 SqlClr
IF EXISTS(SELECT * FROM SYS.ASSEMBLIES WHERE NAME='SqlClr') 
	DROP  ASSEMBLY SqlClr
GO
--5. 创建主程序集: SqlClr
CREATE ASSEMBLY SqlClr FROM 'D:\Tools\DBA\SqlClr\SqlClr.dll' WITH PERMISSION_SET = UNSAFE
GO
-- =============================================
-- Author:		yenange
-- Create date: 2014-11-25
-- Description:	正则表达式匹配
-- =============================================
CREATE FUNCTION [dbo].[Fun_DBA_IsMatch]   
(   
    @source AS NVARCHAR(MAX),  	--要匹配的文本
    @pattern AS NVARCHAR(200),  --进行匹配的正则表达式
	@option INT=3  				--正则表达式匹配选项,1为忽略大小写,2为多行匹配,3为忽略大小写且多行匹配
)   
RETURNS BIT   
AS   
    EXTERNAL NAME [SqlClr].[SqlClr.SqlCLR].[IsMatch];   
GO  
-- =============================================
-- Author:		yenange
-- Create date: 2014-11-25
-- Description:	判断字符串是否为中文
-- =============================================
CREATE FUNCTION [dbo].[Fun_DBA_IsChinese]   
(   
    @source AS NVARCHAR(MAX)  	--要匹配的文本
)   
RETURNS BIT   
AS   
    EXTERNAL NAME [SqlClr].[SqlClr.SqlCLR].[IsChinese];   
GO  
-- =============================================
-- Author:		yenange
-- Create date: 2016-10-20
-- Description:	根据Url获取html
-- =============================================
CREATE FUNCTION [dbo].[Fun_DBA_GetHTML]   
(   
    @url AS NVARCHAR(MAX)  	--url
)   
RETURNS NVARCHAR(MAX)  
AS   
    EXTERNAL NAME [SqlClr].[SqlClr.SqlCLR].[Fun_GetHTML];   
GO
IF OBJECT_ID('Fun_SplitChineseAndEnglish') IS NOT NULL
DROP FUNCTION Fun_SplitChineseAndEnglish
GO
-- =============================================
-- Author:		yenange
-- Create date: 2014-11-25
-- Description:	切分中英文
-- =============================================
CREATE FUNCTION [dbo].Fun_SplitChineseAndEnglish   
(   
    @source AS NVARCHAR(MAX)  	--要匹配的文本
)   
RETURNS @r TABLE(
	rowNum INT IDENTITY(1,1) PRIMARY KEY
	,string NVARCHAR(max)
	,isChinese BIT
)   
AS
BEGIN
	DECLARE @single NCHAR(1),@rowNum INT
	WHILE len(@source)>0
	BEGIN
		SET @single=substring(@source,1,1)
		SELECT @rowNum=isnull(MAX(rowNum),0) FROM @r
		IF dbo.Fun_DBA_IsChinese(@single)=1
			BEGIN
				IF EXISTS(SELECT * FROM @r WHERE rowNum=@rowNum AND isChinese=1)
					UPDATE @r SET string=string+@single WHERE rowNum=@rowNum
				ELSE
					INSERT INTO @r (string,isChinese) VALUES(@single,1)
			END
		ELSE
			BEGIN
				IF EXISTS(SELECT * FROM @r WHERE rowNum=@rowNum AND isChinese=0)
					UPDATE @r SET string=string+@single WHERE rowNum=@rowNum
				ELSE
					INSERT INTO @r (string,isChinese) VALUES(@single,0)			
			END
		SET @source=SUBSTRING(@source,2,LEN(@source))
	END
	RETURN
END
GO



示例代码:

DECLARE @s NVARCHAR(MAX)
SET @s='被子植物门 Angiospermae双子叶植物纲 Dicotyledoneae原始花被亚纲 Archichlamydeae伞形目 Umbelliflorae五加科 Araliaceae多蕊木族 PLERANDREAE五加属 Acanthopanax五加组 Sect. Acanthopanax'

SELECT * FROM dbo.Fun_SplitChineseAndEnglish(@s)

结果:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,MSSQL2008R2本身不支持发送HTTP请求的功能,因此不能通过存储过程直接发送GET请求。你可以考虑使用SQLCLR(即SQL Server Common Language Runtime)来实现发送HTTP请求的功能,步骤如下: 1. 创建一个C#类库项目,编写一个类来实现发送HTTP请求的功能。 2. 在该类库项目中添加对System.Net命名空间的引用。 3. 在类中编写发送HTTP请求的代码,例如使用HttpWebRequest类来发送请求。 4. 将该类库项目编译为DLL文件。 5. 将该DLL文件上传到MSSQL2008R2数据库服务器上。 6. 在MSSQL2008R2数据库中创建一个SQLCLR存储过程,以调用该DLL文件中的类和方法来发送HTTP请求。 以下是一个简单的示例代码,仅供参考: ``` using System; using System.Data; using System.Data.SqlClient; using System.Data.SqlTypes; using Microsoft.SqlServer.Server; using System.Net; public partial class StoredProcedures { [Microsoft.SqlServer.Server.SqlProcedure] public static void SendHttpRequest(SqlString url) { try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url.ToString()); request.Method = "GET"; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); response.Close(); } catch (Exception ex) { SqlContext.Pipe.Send(ex.Message); } } } ``` 在此示例中,我们创建了一个名为SendHttpRequest的SQLCLR存储过程,该存储过程接受一个名为url的输入参数,该参数为SqlString类型,表示要发送的HTTP请求的URL。 在存储过程中,我们使用HttpWebRequest类来创建HTTP请求对象,并设置请求的方法为GET。然后,我们发送请求并获取响应,最后关闭响应流。如果发送HTTP请求发生错误,则将错误消息发送回客户端。 请注意,在使用SQLCLR存储过程时,需要启用CLR集成功能。您可以在MSSQL2008R2数据库中使用以下命令启用CLR集成功能: ``` sp_configure 'clr enabled', 1; RECONFIGURE; ``` 启用CLR集成功能后,您可以创建SQLCLR存储过程并调用它,以实现发送HTTP请求的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值