日期:2014-05-19  浏览次数:20400 次

一个函数的使用问题

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