получение ошибки «Не удалось найти хранимую процедуру sp_OACreate» в SQL Azure - PullRequest
5 голосов
/ 13 января 2011

Когда я пытаюсь выполнить хранимую процедуру sp_OACreate в базе данных SQL Azure. Я получаю следующую ошибку:

Не удалось найти хранимую процедуру 'sp_OACreate'

в SQL Azure.

Может кто-нибудь сказать мне, как выполнить методы автоматизации OLE, такие как sp_OACreate в SQL Azure.

Любая помощь будет высоко оценена.

Спасибо.


Скопированный и отформатированный из ответа ОП (который должен был быть отредактирован):

Я пытаюсь попасть в картографические сервисы Google, чтобы получить координаты (широта и долгота) любого адреса. Я выполняю ниже SQL запросов. Он отлично работает в SQL Server 2005, но дает ошибку в SQL Azure 2008. См. Ниже :-( Пожалуйста, предложите несколько альтернатив для этого)

DECLARE @Sample TABLE
(
RowID INT IDENTITY(1, 1) PRIMARY KEY CLUSTERED,
Postal VARCHAR(50) NOT NULL,
ZipCode VARCHAR(50) NOT NULL,
City VARCHAR(50) NOT NULL,
Country VARCHAR(50) NOT NULL,
Status SMALLINT,
Accuracy TINYINT,
Lat DECIMAL(9, 6),
Lon DECIMAL(9, 6),
CreDate DATETIME
) 

INSERT @Sample
SELECT 'One Microsoft Way', '98052', 'Redmond, WA', 'USA',null,1,0,0,getdate() UNION ALL
SELECT '170 W. Tasman Dr.', '95134', 'San Jose, CA', 'USA',null,1,0,0,getdate() UNION ALL
SELECT '500 Oracle Parkway', '94065', 'Redwood Shores, CA', 'USA',null,1,0,0,getdate()

select * from @Sample

-- Initialize
DECLARE @url VARCHAR(300),
@win INT,
@hr INT,
@Text VARCHAR(8000),
@RowID int,
@Status smallint,
@Accuracy tinyint,
@Lon decimal(9, 6),
@Lat decimal(9, 6)

SELECT @RowID = MIN(RowID) FROM @Sample WHERE Status IS NULL

WHILE @RowID IS NOT NULL
BEGIN
    SELECT @url = 'q=' + Postal + '+' + ZipCode + '+' + City + '+' + Country
    FROM @Sample
    WHERE RowID = @RowID

    SET @url = 'http://maps.google.com/maps/geo?' + @url
    SET @url = @url + '&output=csv&key={your google api key here}'

    EXEC @hr = sp_OACreate 'WinHttp.WinHttpRequest.5.1', @win OUT
    IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

    EXEC @hr = sp_OAMethod @win, 'Open', NULL, 'GET', @url, 'false'
    IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

    EXEC @hr = sp_OAMethod @win, 'Send'
    IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

    EXEC @hr = sp_OAGetProperty @win, 'ResponseText', @Text OUT
    IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

    EXEC @hr = sp_OADestroy @win 
    IF @hr <> 0 EXEC sp_OAGetErrorInfo @win 

    SET @Text = REPLACE(REPLACE(@Text, '.', '#'), ',', '.')
    SELECT @Status = PARSENAME(@Text, 4),
        @Accuracy = PARSENAME(@Text, 3),
        @Lat = REPLACE(PARSENAME(@Text, 2), '#', '.'),
        @Lon = REPLACE(PARSENAME(@Text, 1), '#', '.')

    UPDATE @Sample
    SET Accuracy = @Accuracy,
        Lat = @Lat,
        Lon = @Lon,
        Status = @Status,
        CreDate = GETDATE()
    WHERE RowID = @RowID

    WAITFOR DELAY '00:00:00.010'

    SELECT @RowID = MIN(RowID)
    FROM @Sample
    WHERE Status IS NULL

END

SELECT * FROM @Sample

--If Above not executing then first execute below 
--sp_configure 'show advanced options', 1; 
--GO RECONFIGURE; 
--
--GO 
--
--sp_configure 'Ole Automation Procedures', 1; GO RECONFIGURE; 
--
--GO

Ответы [ 2 ]

1 голос
/ 14 января 2011

Нет средств для вызова веб-сервисов из SQL Azure - вам нужно переместить такие вызовы в код, который выполняется в службе Windows Azure (в отличие от SQL Azure), и вы не будете писать в Transact SQL.

0 голосов
/ 13 января 2011

sp_OACreate - это хранимая процедура автоматизации, которая недоступна в базе данных SQL Azure

http://msdn.microsoft.com/en-us/library/ee336237.aspx

Я был бы очень удивлен, если бы были какие-либо обходные пути.

...