我有一个相当长的sql脚本。基本上,它将读取一些值,并将它们插入其他一些表中:
USE [database]
GO
/****** Migração Dos Chamados De Pós-Pago ******/
DECLARE db_chamados CURSOR FOR SELECT [Id]
,[NomeCliente]
,[CPFCliente]
,[Assunto]
,[LinhaQuestionada]
,[Descricao]
,[NumeroChamado]
,[DataCadastro]
,[IdSolicitante]
,[IdChamado]
,[DataFechado]
,[IdResponsavel]
,[UF]
,[CARGO]
,[TELEFONE]
,[LINHAASERPORTADA]
,[LINHAPROVISORIA]
,[TIPOLINHA]
FROM [dbo].[POSPAGO_DEMANDA] WHERE [IdSolicitante] NOT IN (878, 1210, 1211, 1213, 1214);
DECLARE @idDemanda int;
DECLARE @nomeCliente VARCHAR(max);
DECLARE @cpfCliente VARCHAR(MAX);
DECLARE @assunto VARCHAR(MAX);
DECLARE @linhaQuestionada VARCHAR(MAX);
DECLARE @descricao VARCHAR(MAX);
DECLARE @numeroChamado VARCHAR(MAX);
DECLARE @dataCadastro datetime;
DECLARE @idSolicitante int;
DECLARE @idChamado int;
DECLARE @dataFechado datetime;
DECLARE @idResponsavel int;
DECLARE @uf VARCHAR(2);
DECLARE @cargo VARCHAR(max);
DECLARE @telefone VARCHAR(MAX);
DECLARE @linhaASerPortada VARCHAR(max);
DECLARE @linhaProvisoria VARCHAR(max);
DECLARE @tipoLinha VARCHAR(MAX);
OPEN db_chamados;
FETCH NEXT FROM db_chamados INTO
@idDemanda, @nomeCliente, @cpfCliente, @assunto, @linhaQuestionada, @descricao, @numeroChamado,
@dataCadastro, @idSolicitante, @idChamado, @dataFechado, @idResponsavel,
@uf, @cargo, @telefone, @linhaASerPortada, @linhaProvisoria, @tipoLinha;
WHILE @@FETCH_STATUS = 0
BEGIN
--Recuperando a fila
DECLARE @id_fila int;
SELECT @id_fila = ID FROM [Vivo_MAIS].[dbo].[CONTROLE_DE_DEMANDAS_FILA] WHERE FILA = 'Pós Pago' AND REGIONAL = 'NE';
--Recuperando o solicitante
DECLARE @solicitante varchar(max);
SELECT @solicitante = LOGIN FROM [Vivo_MAIS].[dbo].ACESSO WHERE idAcesso = @idSolicitante;
--Inserindo em [CONTROLE_DE_DEMANDAS_CHAMADO]
DECLARE @id_chamado int;
DECLARE @table_chamado table (id int);
INSERT INTO [CONTROLE_DE_DEMANDAS_CHAMADO] ([ID_FILA_CHAMADO], [MATRICULA_SOLICITANTE], REGIONAL, DATA_ABERTURA)
OUTPUT INSERTED.ID INTO @table_chamado VALUES (@id_fila, @solicitante, 'NE', @dataCadastro);
SELECT @id_chamado = id FROM @table_chamado;
--Inserindo em CONTROLE_DE_DEMANDAS_CAMPOS_CHAMADO
DECLARE @id_campo_chamado int;
DECLARE @table_campos_chamado table (id int);
INSERT INTO [CONTROLE_DE_DEMANDAS_CAMPOS_CHAMADO] OUTPUT INSERTED.ID INTO @table_campos_chamado VALUES (@id_chamado)
SELECT @id_campo_chamado = id FROM @table_campos_chamado;
--Inserindo em [CONTROLE_DE_DEMANDAS_RELACAO_CAMPOS_CHAMADO]
INSERT INTO [Vivo_MAIS].[dbo].[CONTROLE_DE_DEMANDAS_RELACAO_CAMPOS_CHAMADO]
VALUES (@id_campo_chamado, 'Nome Do Cliente', @nomeCliente);
INSERT INTO [Vivo_MAIS].[dbo].[CONTROLE_DE_DEMANDAS_RELACAO_CAMPOS_CHAMADO]
VALUES (@id_campo_chamado, 'CPF Do Cliente', @cpfCliente);
INSERT INTO [Vivo_MAIS].[dbo].[CONTROLE_DE_DEMANDAS_RELACAO_CAMPOS_CHAMADO]
VALUES (@id_campo_chamado, 'Assunto', @assunto);
INSERT INTO [Vivo_MAIS].[dbo].[CONTROLE_DE_DEMANDAS_RELACAO_CAMPOS_CHAMADO]
VALUES (@id_campo_chamado, 'Linha Do Cliente', @linhaQuestionada);
INSERT INTO [Vivo_MAIS].[dbo].[CONTROLE_DE_DEMANDAS_RELACAO_CAMPOS_CHAMADO]
VALUES (@id_campo_chamado, 'Problema', @descricao);
INSERT INTO [Vivo_MAIS].[dbo].[CONTROLE_DE_DEMANDAS_RELACAO_CAMPOS_CHAMADO]
VALUES (@id_campo_chamado, 'Chamado/Protocolo', @numeroChamado);
INSERT INTO [Vivo_MAIS].[dbo].[CONTROLE_DE_DEMANDAS_RELACAO_CAMPOS_CHAMADO]
VALUES (@id_campo_chamado, 'UF Do Solicitante', @uf);
INSERT INTO [Vivo_MAIS].[dbo].[CONTROLE_DE_DEMANDAS_RELACAO_CAMPOS_CHAMADO]
VALUES (@id_campo_chamado, 'Cargo Do Solicitante', @cargo);
INSERT INTO [Vivo_MAIS].[dbo].[CONTROLE_DE_DEMANDAS_RELACAO_CAMPOS_CHAMADO]
VALUES (@id_campo_chamado, 'Telefone Do Solicitante', @telefone);
INSERT INTO [Vivo_MAIS].[dbo].[CONTROLE_DE_DEMANDAS_RELACAO_CAMPOS_CHAMADO]
VALUES (@id_campo_chamado, 'Linha A Ser Portada', @linhaASerPortada);
INSERT INTO [Vivo_MAIS].[dbo].[CONTROLE_DE_DEMANDAS_RELACAO_CAMPOS_CHAMADO]
VALUES (@id_campo_chamado, 'Linha Provisória', @linhaProvisoria);
INSERT INTO [Vivo_MAIS].[dbo].[CONTROLE_DE_DEMANDAS_RELACAO_CAMPOS_CHAMADO]
VALUES (@id_campo_chamado, 'Tipo Da Linha', @tipoLinha);
--Inserindo em [CONTROLE_DE_DEMANDAS_STATUS_CHAMADO]
DECLARE @id_status_chamado int
DECLARE @table_status_chamado table (id int)
INSERT INTO [CONTROLE_DE_DEMANDAS_STATUS_CHAMADO] OUTPUT INSERTED.ID INTO @table_status_chamado VALUES (@id_chamado)
SELECT @id_status_chamado = id FROM @table_status_chamado;
--Declarando cursor para pegar o histórico de respostas/status do chamado:
DECLARE db_historico CURSOR FOR SELECT
ID,
[RESPOSTA],
[ID_DEMANDA],
[ID_RESPONSAVEL],
[DATA_RESPOSTA],
[Status]
FROM [dbo].[POSPAGO_RESPOSTA] WHERE [ID_DEMANDA] = @idDemanda;
DECLARE @idResposta int;
DECLARE @resposta varchar(max);
DECLARE @id_demanda int;
DECLARE @idResponsavelResposta int;
DECLARE @dataResposta datetime;
DECLARE @status varchar(255);
--Inserindo em CONTROLE_DE_DEMANDAS_RELACAO_STATUS_CHAMADO e em CONTROLE_DE_DEMANDAS_CHAMADO_RESPOSTA
OPEN db_historico;
FETCH NEXT FROM db_historico INTO @idResposta, @resposta, @id_demanda, @idResponsavelResposta, @dataResposta, @status;
WHILE @@FETCH_STATUS = 0
BEGIN
--Recuperando o responsável pela resposta
DECLARE @responsavel varchar(max);
SELECT @responsavel = LOGIN FROM [Vivo_MAIS].[dbo].[ACESSO] WHERE idAcesso = @idResponsavelResposta;
--Inserindo em CONTROLE_DE_DEMANDAS_RELACAO_STATUS_CHAMADO
INSERT INTO [CONTROLE_DE_DEMANDAS_RELACAO_STATUS_CHAMADO] VALUES (@id_status_chamado, @status, GETDATE(), null);
--Inserindo em CONTROLE_DE_DEMANDAS_CHAMADO_RESPOSTA
DECLARE @id_resposta_chamado int
DECLARE @table_resposta_chamado table (id int)
INSERT INTO [CONTROLE_DE_DEMANDAS_CHAMADO_RESPOSTA] OUTPUT INSERTED.ID INTO @table_resposta_chamado VALUES (@resposta, @id_chamado, @responsavel, @dataResposta);
SELECT @id_resposta_chamado = id FROM @table_resposta_chamado;
--Recuperando e inserindo os arquivos da resposta
DECLARE db_arquivos_respostas CURSOR FOR SELECT [NOME_CAMPO], [ARQUIVO], [EXT_ARQUIVO] FROM [POSPAGO_ARQUIVOS_RESPOSTA] WHERE [ID_RESPOSTA] = @idResposta;
DECLARE @nomeArquivoResposta VARCHAR(MAX);
DECLARE @arquivoResposta VARBINARY(MAX);
DECLARE @extArquivoResposta VARCHAR(10);
OPEN db_arquivos_respostas;
FETCH NEXT FROM db_arquivos_respostas INTO @nomeArquivoResposta, @arquivoResposta, @extArquivoResposta;
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO CONTROLE_DE_DEMANDAS_ARQUIVOS_RESPOSTA VALUES (@id_resposta_chamado, @nomeArquivoResposta, @arquivoResposta, @extArquivoResposta);
FETCH NEXT FROM db_arquivos_respostas INTO @nomeArquivoResposta, @arquivoResposta, @extArquivoResposta;
END;
CLOSE db_arquivos_respostas;
DEALLOCATE db_arquivos_respostas;
FETCH NEXT FROM db_historico INTO @idResposta, @resposta, @id_demanda, @idResponsavelResposta, @dataResposta, @status;
END;
CLOSE db_historico;
DEALLOCATE db_historico;
--Inserindo em CONTROLE_DE_DEMANDAS_CHAMADO_ARQUIVOS
DECLARE db_arquivos_chamado CURSOR FOR SELECT [NOME_CAMPO], [ARQUIVO], [EXT_ARQUIVO] FROM [POSPAGO_ARQUIVOS] WHERE [ID_DEMANDA] = @idDemanda;
DECLARE @nomeArquivoChamado VARCHAR(MAX);
DECLARE @arquivoChamado VARBINARY(MAX);
DECLARE @extArquivoChamado VARCHAR(10);
OPEN db_arquivos_chamado;
FETCH NEXT FROM db_arquivos_chamado INTO @nomeArquivoChamado, @arquivoChamado, @extArquivoChamado;
WHILE @@FETCH_STATUS = 0 --HERE'S THE PROBLEM
BEGIN
INSERT INTO CONTROLE_DE_DEMANDAS_CHAMADO_ARQUIVOS VALUES (@id_chamado, @nomeArquivoChamado, @arquivoChamado, @extArquivoChamado);
FETCH NEXT FROM db_arquivos_chamado INTO @nomeArquivoChamado, @arquivoChamado, @extArquivoChamado;
END;
CLOSE db_arquivos_chamado;
DEALLOCATE db_arquivos_chamado;
FETCH NEXT FROM db_chamados INTO
@idDemanda, @nomeCliente, @cpfCliente, @assunto, @linhaQuestionada, @descricao, @numeroChamado,
@dataCadastro, @idSolicitante, @idChamado, @dataFechado, @idResponsavel,
@uf, @cargo, @telefone, @linhaASerPortada, @linhaProvisoria, @tipoLinha;
END;
CLOSE db_chamados;
DEALLOCATE db_chamados;
当我执行它时,它在“ HERE'S PROBLEM”行中为我提供了从一种类型到另一种不允许的错误的隐式转换。我在声明游标时尝试进行显式转换,但仍然无法正常工作。我再次检查了列,并且它们的类型与声明的变量匹配。我在这里想念什么?