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
            */
¿Fue útil?

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).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top