sp_oacreate vbscript.regexp类未注册
-
16-10-2019 - |
题
想象一下Windows Server 2003 Enterprise X64 Edition。
我可以使用VBScript创建“ vbscript.regexp”对象(确认已注册DLL)。
我无法使用SQL Server 2005 SP3(.4053)(群集)环境中的SP_OACREATE创建“ vbscript.regexp”对象。
在表面积配置中检查了OLE自动化。
直到最近,SP_OACREATE一直在工作。
你能帮助我吗?
*代码*
declare
@source varchar(5000),
@regexp varchar(1000),
@replace varchar(1000),
@globalReplace bit,
@ignoreCase bit
set @source = 'NBG76TF43'
set @regexp = '[^0-9]'
set @replace = ''
set @globalReplace = 1
set @ignoreCase = 1
DECLARE @hr integer
DECLARE @objRegExp integer
DECLARE @result varchar(5000)
EXECUTE @hr = sp_OACreate 'VBScript.RegExp', @objRegExp OUTPUT
IF @hr <> 0
BEGIN
EXEC @hr = sp_OADestroy @objRegExp
PRINT 'A'
PRINT @hr
END
EXECUTE @hr = sp_OASetProperty @objRegExp, 'Pattern', @regexp
IF @hr <> 0
BEGIN
EXEC @hr = sp_OADestroy @objRegExp
PRINT 'B'
PRINT @hr
END
EXECUTE @hr = sp_OASetProperty @objRegExp, 'Global', @globalReplace
IF @hr <> 0
BEGIN
EXEC @hr = sp_OADestroy @objRegExp
PRINT 'C'
PRINT @hr
END
EXECUTE @hr = sp_OASetProperty @objRegExp, 'IgnoreCase', @ignoreCase
IF @hr <> 0
BEGIN
EXEC @hr = sp_OADestroy @objRegExp
PRINT 'D'
PRINT @hr
END
EXECUTE @hr = sp_OAMethod @objRegExp, 'Replace', @result OUTPUT, @source, @replace
IF @hr <> 0
BEGIN
EXEC @hr = sp_OADestroy @objRegExp
PRINT 'E'
PRINT @hr
END
EXECUTE @hr = sp_OADestroy @objRegExp
IF @hr <> 0
BEGIN
PRINT 'F'
PRINT @hr
END
PRINT @result
/*
A
-2147211480
B
-2147211480
C
-2147211480
D
-2147211480
E
-2147211480
F
-2147211480
*/
解决方案
十个月后,该问题再次发生在同一系统上。
- 特定错误:0x8007045a(动态链接库(DLL)初始化例程失败)
我找不到这个问题的原因。但是,我发现了足够的相关方案(十个月前),建议重新启动服务器可以解决问题。
我重新启动了服务器群集(两个节点,之后的故障转移之后),并解决了问题(可以使用sp_oacreate创建'vbscript.regexp'对象)。
不隶属于 dba.stackexchange