【问题标题】:getting error "Could not find stored procedure 'sp_OACreate'" in Sql Azure在 Sql Azure 中出现错误“找不到存储过程'sp_OACreate'”
【发布时间】:2011-01-13 11:38:38
【问题描述】:

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

找不到存储过程“sp_OACreate”

在 SQL Azure 中。

谁能告诉我如何在 SQL Azure 中执行像 sp_OACreate 这样的 OLE 自动化方法。

我们将不胜感激。

谢谢。


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

我正在尝试使用谷歌地图服务来获取任何地址的坐标(纬度和经度)。我正在执行下面的 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

【问题讨论】:

  • 也许您可以在这里描述您想要实现的目标 - 您显然是在尝试使用 COM 组件 - 它是我们可以建议替代方案的通用组件吗?

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 我已经描述了我的问题,请检查并为此提出一些替代方案。
    • 不知道。不要认为除了已经建议的之外还有其他的。将逻辑移出 SQL Azure。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2018-04-06
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    相关资源
    最近更新 更多