Ken@t |
---|
Soloxa,
На выбор 1. Переписать хп 2. Использовать курсор |
Возможно или нет переписать данную ХП
Я читал что использование курсоров надо избегать
вот полный текст хп
USE [BDSQL]
GO
/****** Object: StoredProcedure [dbo].[check_sms_status] Script Date: 10.02.2013 3:15:19 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[check_sms_status] @sms_id nvarchar(255)
as
BEGIN
DECLARE
@url varchar(800) = 'http://alfa-sms.ru:8080/smw/aisms?user=*****&pass=*********&action=status&sms_id='
, @win int
, @text varchar (1000)
, @SMS_CLOSE_TIME varchar (20)
, @SMSSTC_CODE varchar (20)
set @url=@url+@sms_id
EXEC sp_OACreate 'Microsoft.XMLHTTP',@win OUT
EXEC sp_OAMethod @win, 'Open',null,'GET',@url,0
EXEC sp_OAMethod @win,'Send'
EXEC sp_OAGetProperty @win,'ResponseText', @text output
EXEC sp_OADestroy @win
print @text
if charindex('error',@text)=0
begin
set @SMS_CLOSE_TIME = [dbo].[parser](@text, '<SMS_CLOSE_TIME>', '<')
set @SMSSTC_CODE =[dbo].[parser](@text, 'SMSSTC_CODE>', '<')
print @SMS_CLOSE_TIME
print @SMSSTC_CODE
if CHARINDEX('НЕ_НАЙДЕНО', @SMS_CLOSE_TIME) = 0 UPDATE sms SET [Статус_получен] = @SMS_CLOSE_TIME WHERE sms.sms_id = @sms_id
if CHARINDEX('НЕ_НАЙДЕНО', @SMSSTC_CODE) = 0 UPDATE sms SET sms.Статус= @SMSSTC_CODE WHERE sms.sms_id = @sms_id
if @SMSSTC_CODE='delivered'
begin
declare @code as integer, @tel as nvarchar (11) , @sms_text as varchar (2000)
select @code = [Code_delo] from sms where [sms_id]= @sms_id
select @tel = [Получатель] from sms where [sms_id]= @sms_id
select @sms_text = [Текст] from sms where [sms_id]= @sms_id
INSERT INTO Kontakt ([Day/time] ,Code_delo, Coment, Телефон) VALUES (@SMS_CLOSE_TIME,@code,'СМС на телефон '+ @tel + 'ДОСТАВЛЕНО Текст: ' + @sms_text,@tel)
end
end
END
вот на всякий случай код функции parser
USE [BDSQL]
GO
/****** Object: UserDefinedFunction [dbo].[parser] Script Date: 10.02.2013 3:18:27 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER function [dbo].[parser]
(
@in_string varchar(8000),
@pered varchar(20),
@posle varchar(20)
)
returns varchar(1000)
as
BEGIN
DECLARE @z int
DECLARE @z1 int
DECLARE @parser varchar (1000)
set @z = charindex(@pered,@in_string)
If @z > 0
begin
set @z1=charindex(@posle,@in_string,@z+8)
set @in_string = Left(@in_string, @z1 - 1)
set @in_string = Right(@in_string, @z1 - @z - Len(@pered))
set @parser = @in_string
end
Else set @parser = 'НЕ_НАЙДЕНО';
RETURN @parser
END