UPDATE USANDO STORAGE PROCEDURE
28/09/2020
0
essoal boa tarde socorro
estou com um erro de em uma das minha procedures, onde ela precisa inserir um sequencial de 50 numeros
um exemplo numero ramal existente , 3350 ..a minha procedure precisa add mais 40 ramais entao deveria inserir
3351 3352 3353 ....e assim ate os 50
mas em vez disso esta inserindo 50 vezes o mesmo ramal.
tipo
3350
3350
3350
3350
o codigo seria esse
UPDATE minhabase.DBO.TB_TEL_minhatabela
SET QT_RAMAIS = QT_RAMAIS + @QT_RAMAIS
,RA_FINAL = @NUMERO_FINAL
WHERE PK_ENTRONCAMENTO = @PK_ENTRONCAMENTO
DECLARE @QUANTIDADE INT = @QT_RAMAIS;
DECLARE @NUMERO_TEMP INT = substring(@NUMERO,0,5);
DECLARE @NUMERO_FINAL_TEMP INT
WHILE @QUANTIDADE > 0
BEGIN
SET @NUMERO_INICIAL_CADASTRO = @NUMERO_INICIAL_CADASTRO
SET @NUMERO_TEMP = substring(@NUMERO,0,5)
if(len(@NUMERO_INICIAL_CADASTRO)=3)
begin
set @NUMERO_INICIAL_CADASTRO = concat('0',@NUMERO_INICIAL_CADASTRO)
end
if(len(@NUMERO_INICIAL_CADASTRO)=2)
begin
set @NUMERO_INICIAL_CADASTRO = concat('00',@NUMERO_INICIAL_CADASTRO)
end
if(len(@NUMERO_INICIAL_CADASTRO)=1)
begin
set @NUMERO_INICIAL_CADASTRO = concat('000',@NUMERO_INICIAL_CADASTRO)
end
SET @NUMERO_TEMP = concat(@NUMERO_TEMP,@NUMERO_INICIAL_CADASTRO)
INSERT INTO minhabase.DBO.TB_TEL_fones
(ID_UNID, DDD, NUMERO, EXPIRADO, TIPO_LINHA, USR_CADASTRO, DATA_CONTRATACAO, TP_ENTRONCAMENTO, CODIGO_TELE)
VALUES(@ID_UNID, @DDD, @NUMERO_TEMP, 0, 1, @USR_SOLICITANTE, @DT_CONTRATACAO, 1, @CODIGO_TELE)
DECLARE @ID_FONE_TEMP INT = scope_identity();
--( SELECT TOP 1 ID_FONE
--
FROM telecom_consolidado.dbo.TB_TEL_013_FONE_CAIXA
--
WHERE DDD = @DDD
--
AND NUMERO = @NUMERO_TEMP
--
AND DATA_DESCONTRATACAO IS NULL )
declare @PGO_TEMP int = (SELECT top 1 [PGO] FROM [minhabase[dbo].[TB_TEL_042_PGO] where ddd=@DDD)
INSERT INTO minhabae.DBO.TB_minhatabela
(ID_FONE, ID_UNID, DDD, NUMERO, FK_ENTRONCAMENTO, TP_ENTRONCAMENTO, CONTRATO, DATA_CONTRATACAO, CODIGO_TELE, DATA_INCLUSAO, NU_PGO)
VALUES(@ID_FONE_TEMP,@ID_UNID, @DDD, @NUMERO_TEMP, @PK_ENTRONCAMENTO, 1, @CONTRATO, @DT_CONTRATACAO, @CODIGO_TELE, GETDATE(), @PGO_TEMP)
SET @QUANTIDADE = @QUANTIDADE-1
END
estou com um erro de em uma das minha procedures, onde ela precisa inserir um sequencial de 50 numeros
um exemplo numero ramal existente , 3350 ..a minha procedure precisa add mais 40 ramais entao deveria inserir
3351 3352 3353 ....e assim ate os 50
mas em vez disso esta inserindo 50 vezes o mesmo ramal.
tipo
3350
3350
3350
3350
o codigo seria esse
UPDATE minhabase.DBO.TB_TEL_minhatabela
SET QT_RAMAIS = QT_RAMAIS + @QT_RAMAIS
,RA_FINAL = @NUMERO_FINAL
WHERE PK_ENTRONCAMENTO = @PK_ENTRONCAMENTO
DECLARE @QUANTIDADE INT = @QT_RAMAIS;
DECLARE @NUMERO_TEMP INT = substring(@NUMERO,0,5);
DECLARE @NUMERO_FINAL_TEMP INT
WHILE @QUANTIDADE > 0
BEGIN
SET @NUMERO_INICIAL_CADASTRO = @NUMERO_INICIAL_CADASTRO
SET @NUMERO_TEMP = substring(@NUMERO,0,5)
if(len(@NUMERO_INICIAL_CADASTRO)=3)
begin
set @NUMERO_INICIAL_CADASTRO = concat('0',@NUMERO_INICIAL_CADASTRO)
end
if(len(@NUMERO_INICIAL_CADASTRO)=2)
begin
set @NUMERO_INICIAL_CADASTRO = concat('00',@NUMERO_INICIAL_CADASTRO)
end
if(len(@NUMERO_INICIAL_CADASTRO)=1)
begin
set @NUMERO_INICIAL_CADASTRO = concat('000',@NUMERO_INICIAL_CADASTRO)
end
SET @NUMERO_TEMP = concat(@NUMERO_TEMP,@NUMERO_INICIAL_CADASTRO)
INSERT INTO minhabase.DBO.TB_TEL_fones
(ID_UNID, DDD, NUMERO, EXPIRADO, TIPO_LINHA, USR_CADASTRO, DATA_CONTRATACAO, TP_ENTRONCAMENTO, CODIGO_TELE)
VALUES(@ID_UNID, @DDD, @NUMERO_TEMP, 0, 1, @USR_SOLICITANTE, @DT_CONTRATACAO, 1, @CODIGO_TELE)
DECLARE @ID_FONE_TEMP INT = scope_identity();
--( SELECT TOP 1 ID_FONE
--
FROM telecom_consolidado.dbo.TB_TEL_013_FONE_CAIXA
--
WHERE DDD = @DDD
--
AND NUMERO = @NUMERO_TEMP
--
AND DATA_DESCONTRATACAO IS NULL )
declare @PGO_TEMP int = (SELECT top 1 [PGO] FROM [minhabase[dbo].[TB_TEL_042_PGO] where ddd=@DDD)
INSERT INTO minhabae.DBO.TB_minhatabela
(ID_FONE, ID_UNID, DDD, NUMERO, FK_ENTRONCAMENTO, TP_ENTRONCAMENTO, CONTRATO, DATA_CONTRATACAO, CODIGO_TELE, DATA_INCLUSAO, NU_PGO)
VALUES(@ID_FONE_TEMP,@ID_UNID, @DDD, @NUMERO_TEMP, @PK_ENTRONCAMENTO, 1, @CONTRATO, @DT_CONTRATACAO, @CODIGO_TELE, GETDATE(), @PGO_TEMP)
SET @QUANTIDADE = @QUANTIDADE-1
END
Flavio Nunes
Curtir tópico
+ 0
Responder
Posts
29/09/2020
Emerson Nascimento
não entendi muito bem a instrução, mas aí vai um código pra você tomar como base:
/*UPDATE minhabase.DBO.TB_TEL_minhatabela SET QT_RAMAIS = QT_RAMAIS + @QT_RAMAIS ,RA_FINAL = @NUMERO_FINAL WHERE PK_ENTRONCAMENTO = @PK_ENTRONCAMENTO */ -- o ramal inicial deve ser atribuido fora do loop DECLARE @NUMERO_INICIAL_CADASTRO VARCHAR(4) = '3350' DECLARE @QT_RAMAIS INT = 50; DECLARE @TAMANHO_RAMAL INT = 4 -- RAMAL TERÁ 4 DÍGITOS - PODE SER UM PARÂMETRO DA STORED PROCEDURE -- variáveis de controle do incremento de ramais DECLARE @NOVO_RAMAL INT = CAST(@NUMERO_INICIAL_CADASTRO AS INT) -- NOVO RAMAL NUMERICO DECLARE @CNOVO_RAMAL VARCHAR(10) -- NOVO RAMAL CARACTERE DECLARE @ULTIMO_RAMAL INT = (@NOVO_RAMAL + @QT_RAMAIS) WHILE @NOVO_RAMAL < @ULTIMO_RAMAL BEGIN -- incrementa o número SET @NOVO_RAMAL = @NOVO_RAMAL + 1 SET @CNOVO_RAMAL = RIGHT(REPLICATE('0',@TAMANHO_RAMAL)+LTRIM(RTRIM(CAST(@NOVO_RAMAL AS VARCHAR(10)))),@TAMANHO_RAMAL) -- PRINT @CNOVO_RAMAL -- habilite esta linha para apresentar o número do ramal que está sendo manipulado /* INSERT INTO minhabase.DBO.TB_TEL_fones (ID_UNID, DDD, NUMERO, EXPIRADO, TIPO_LINHA, USR_CADASTRO, DATA_CONTRATACAO, TP_ENTRONCAMENTO, CODIGO_TELE) VALUES(@ID_UNID, @DDD, @NUMERO_TEMP, 0, 1, @USR_SOLICITANTE, @DT_CONTRATACAO, 1, @CODIGO_TELE) DECLARE @ID_FONE_TEMP INT = scope_identity(); --( SELECT TOP 1 ID_FONE -- FROM telecom_consolidado.dbo.TB_TEL_013_FONE_CAIXA -- WHERE DDD = @DDD -- AND NUMERO = @NUMERO_TEMP -- AND DATA_DESCONTRATACAO IS NULL ) declare @PGO_TEMP int = (SELECT top 1 [PGO] FROM [minhabase[dbo].[TB_TEL_042_PGO] where ddd=@DDD) INSERT INTO minhabae.DBO.TB_minhatabela (ID_FONE, ID_UNID, DDD, NUMERO, FK_ENTRONCAMENTO, TP_ENTRONCAMENTO, CONTRATO, DATA_CONTRATACAO, CODIGO_TELE, DATA_INCLUSAO, NU_PGO) VALUES(@ID_FONE_TEMP,@ID_UNID, @DDD, @NUMERO_TEMP, @PK_ENTRONCAMENTO, 1, @CONTRATO, @DT_CONTRATACAO, @CODIGO_TELE, GETDATE(), @PGO_TEMP) */ END
Responder
Clique aqui para fazer login e interagir na Comunidade :)