一个函数的使用问题
create function DCMSconvert (@sInText Nvarchar(50),@TransType int)
--注释:1、@sInText 表示要转换的字符串 2、@TransType 表示转换类型 0转繁体 1-转简体
RETURNS Nvarchar(50)
AS
BEGIN
DECLARE @sOutText Nvarchar(50)
DECLARE @Document int
EXEC sp_OACreate 'Word.Document ', @Document OUT
EXEC sp_OASetProperty @Document, 'Application.Selection.Text ', @sInText
EXEC sp_OAMethod @Document, 'Application.Selection.Range.TCSCConverter ',NULL,@TransType,1,1
EXEC sp_OAGetProperty @Document, 'Application.Selection.Text ', @sOutText OUT
EXEC sp_OADestroy @Document
EXEC sp_OAStop
RETURN(@sOutText)
END
GO
--表A,字段File
select dbo.DCMSconvert(File,1) from A
--问题是我这样做,只有第一条记录才被函数转换,其它的只显示NULL,是什么原因,怎样解决,我想把这字段的全转换
------解决方案---------------------- EXEC sp_OAStop --将这句注释掉
查找sqlser帮助可以看到如下解释:
sp_OAStop
停止服务器范围内的 OLE 自动化存储过程执行环境。
当客户端第一次调用 sp_OACreate 时,将自动启动共享的 OLE 自动化存储过程执行环境。所有使用 OLE 自动化存储过程的客户端都共享一个单独的执行环境。
----------------------------------
我们可以这样理解,当你调用sp_oastop停止服务器的OLE自动化存储执行环境后;
第二次调用的sp_oacreate过程并没有启动这个环境;所以后续的执行结果为null