sql-server - 在 Sql Azure 中收到错误 "Could not find stored procedure ' sp_OACreate'"

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

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

Could not find stored procedure 'sp_OACreate'

在 SQL Azure 中。

谁能告诉我如何在 SQL Azure 中执行 OLE 自动化方法,例如 sp_OACreate

任何帮助将不胜感激。

谢谢。

<小时/>

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

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

最佳答案

无法从 SQL Azure 内部调用 Web 服务 - 您必须将此类调用移至在 Windows Azure(而不是 SQL Azure)服务上运行的代码,并且您不会用 Transact SQL 编写它。

关于sql-server - 在 Sql Azure 中收到错误 "Could not find stored procedure ' sp_OACreate'",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4679622/

相关文章:

sql - 从 Sql 服务器中的 where 子句中排除函数

sql - 如何在子查询中引用临时表?

sql - 如何删除 SQL Server 2008 R2 数据库中的最后 N 条记录?

mysql - 我可以在 cfloop 中调用存储过程并在 Coldfusion 中输出动态输出参数吗?

postgresql - 如何在 postgres 函数中设置时区

c# - 在 CreatedBy/ModifiedBy 等 sql 审计列中存储 UserId 而不是 Username 的优势

c# - 字符串或二进制数据将被截断错误消息

sql - 将多行数据聚合成单行

c# - 如何在数据库中存储和访问 session

SQL Server 计数速度慢