在Sql Azure中收到错误“无法找到存储过程'sp_OACreate'”

时间:2011-01-13 11:38:39

标签: sql-server stored-procedures sql-server-2008-r2 azure-sql-database

当我尝试在SQL azure数据库中执行sp_OACreate存储过程时。我收到了以下错误:

  

找不到存储过程'sp_OACreate'

SQL Azure中的

任何人都可以告诉我如何在SQL Azure中执行OLE自动化方法,如sp_OACreate

任何帮助都将受到高度赞赏。

感谢。


复制&从OPs答案格式化(应该是编辑):

我正试图点击谷歌地图服务以获得任何地址的联合(纬度和经度)。我正在执行下面的SQL查询。它在SQL Server 2005中运行良好,但它在SQL Azure 2008中给出错误.Plz见下文:-(请为此建议一些备用)

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 个答案:

答案 0 :(得分:1)

没有办法从SQL Azure中调用Web服务 - 您必须将这些调用转移到运行在Windows Azure(而不是SQL Azure)服务上的代码中,并且您不会在Transact SQL中编写它。

答案 1 :(得分:0)

sp_OACreate是一个自动存储过程,在SQL Azure数据库中不可用

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

如果有任何解决方法,我会非常惊讶。