Вопрос

Представьте себе издание Windows Server 2003 Enterprise X64.

Я могу создать объект 'vbscript.regexp' с использованием VBScript (подтверждая, что DLL зарегистрирован).

Я не могу создать объект 'vbscript.regexp', используя SP_OACReate в среде SQL Server 2005 SP3 (.4053) (кластер).

Автоматизация 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))

Я не могу найти причину этой проблемы. Тем не менее, я обнаружил достаточно связанных сценариев (десять месяцев назад), которые предположили, что перезагрузка сервера решит проблему.

Я перезагрузил кластер сервера (оба узла, следуя контролируемым отказаниям), и проблема была решена (может создать объект vbscript.regexp 'с использованием sp_oacreate).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top