sp_oacreate vbscript.regexp clase no registrada
-
16-10-2019 - |
Pregunta
Imagine una edición Windows Server 2003 Enterprise X64.
Puedo crear un objeto 'VBScript.egexp' usando un VBScript (confirmando que el DLL está registrado).
No puedo crear un objeto 'VBScript.egexp' usando SP_OACREATE en un entorno SQL Server 2005 SP3 (.4053) (clúster).
Ole Automation se verifica en la configuración del área de superficie.
El sp_oacreate funcionaba hasta hace muy poco.
¿Me puedes ayudar?
*CÓDIGO*
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
*/
Solución
Diez meses después, el problema ocurrió nuevamente en el mismo sistema.
- Error específico: 0x8007045a (una rutina de inicialización de la biblioteca de enlaces dinámicos (DLL) falló)
No puedo encontrar la causa de este problema. Sin embargo, encontré suficientes escenarios relacionados (hace diez meses) que sugirieron que reiniciar el servidor resolvería el problema.
Reinicié el clúster del servidor (ambos nodos, siguiendo las fallas controladas), y el problema se resolvió (puede crear un objeto 'VBScript.egexp' usando SP_OACREATE).