UPDATE USANDO STORAGE PROCEDURE
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
Curtidas 0
Respostas
Emerson Nascimento
28/09/2020
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
GOSTEI 0