【问题标题】:Sending SMS from SQL Server 2014 Issu Identification从 SQL Server 2014 问题识别发送 SMS
【发布时间】:2017-03-18 08:03:51
【问题描述】:

我正在使用以下代码从 SQL Server 2014 发送短信。它曾经可以正常工作,但几天后它无法正常工作。我还在另一个 SQL Server 中执行了以下代码,它运行良好。但由于某种原因无法在 SQL Server 2014 中运行。我还尝试在浏览器中使用 url 发送槽,它也可以。但有些我不能通过存储过程工作。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

--EXEC sp_SendSmsSQL '*****','Today is Saturday',''

ALTER procedure [dbo].[sp_SendSmsSQL] 
    @MobileNo varchar(max), 
    @smstext as varchar(300), 
    @sResponse varchar(8000) OUT 
as 
BEGIN 
   DECLARE @iReq int,@hr int 
   DECLARE @sUrl as varchar(500) 
   DECLARE @errorSource VARCHAR(8000)
   DECLARE @errorDescription VARCHAR(8000) 

   -- Create Object for XMLHTTP 
   EXEC @hr = sp_OACreate 'Microsoft.XMLHTTP', @iReq OUT

   --EXEC @hr = sp_OACreate 'MSXML2.ServerXMLHTTP', @iReq OUT   
   print '*'
   print 'hr : ' + cast(@hr as varchar)

   if @hr <> 0 
    Raiserror('sp_OACreate Microsoft.XMLHTTP FAILED!', 16, 1)

    set @sUrl='****'
    set @sUrl=REPLACE(@sUrl,'#MobNo#',@MobileNo) 
    set @sUrl=REPLACE(@sUrl,'#Msg#',@smstext) 

    print @sUrl 


   -- sms code start 
   EXEC @hr = sp_OAMethod @iReq, 'Open', NULL, 'GET', @sUrl, true 
   print '**'
   print @hr 

   if @hr <> 0 
      Raiserror('sp_OAMethod Open FAILED!', 16, 1) 

   EXEC @hr = sp_OAMethod @iReq, 'Send' 
   select @iReq
   print '***'
   print 'hr : ' + cast(@hr as varchar)

   if @hr <> 0 
   Begin 
       EXEC sp_OAGetErrorInfo @iReq, @errorSource OUTPUT, @errorDescription OUTPUT

       SELECT [Error Source] = @errorSource, [Description] = @errorDescription

       Raiserror('sp_OAMethod Send FAILED!', 16, 1) 
   end 
    else 
    Begin
        EXEC @hr = sp_OAGetProperty @iReq,'responseText', @sResponse OUT 

        print @hr
        print '****'
        print @sresponse


    end

    EXEC @hr=sp_OADestroy @iReq
    print @hr 

    DBCC FREEPROCCACHE
    DBCC DROPCLEANBUFFERS
END

关注结果

    *
hr : 0
url ='******'
**
0

(1 row(s) affected)
***
hr : 0
-2147483638
****

0
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

【问题讨论】:

标签: sql-server sql-server-2008 stored-procedures sms-gateway


【解决方案1】:

您没有提供 SQL 服务器返回的错误消息,但这听起来确实是一个安全问题。 DBCC FREEPROCCACHE 需要更改服务器状态权限。此外,需要启用 sp_oa... 方法,并且用户必须有权运行它们 (SQL Server blocked access to procedure 'sys.sp_OACreate' of component 'Ole Automation Procedures')。最后,我不确定您为什么在存储过程中运行 DBCC 命令。 FREEPROCCACHE 有限制,但您可以使用选项 (https://msdn.microsoft.com/en-us/library/ms174283.aspx) 调用它。 DROPCLEANBUFFERS 实际上是为了测试查询性能。如果您的 DBCC 命令只是用于测试,请将它们从存储过程中删除,并将它们放在对存储过程的调用之后。

【讨论】:

    猜你喜欢
    • 2018-09-17
    • 2023-03-12
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多