Array
(
)

Select Insert Into não roda, dá erro

Pjava
   - 26 jul 2011

Fiz esse select e está dando erro. Qual é o erro? O que falta nele?  

select 'INSERT INTO CONHECIMENTO_CARGA VALUES('+ Convert(varchar(6),cod_indice))+','+titulo+','+

tipo+','+convert(varchar(6),num_max)+','+aplicacao+','+mascara+','+convert(varchar(6),qtd_caracter)+

')' from indice

Marco Pinheiro
   - 26 jul 2011

PJava,

Informe qual o erro ocorre na execução.

Lembrando que todos os campos envolvidos nesta consulta devem ser VARCHAR ou CHAR.

Att.,

Marco.

Emerson
   - 26 jul 2011

select 'INSERT INTO CONHECIMENTO_CARGA VALUES(' + Convert(varchar(6),cod_indice)) + ',' + titulo + ',' +
tipo + ',' + convert(varchar(6),num_max) + ',' + aplicacao + ',' + mascara + ',' + convert(varchar(6),qtd_caracter) + ')'
from indice

o trecho destacado deveria ter apenas 1 parêntesis.

select 'INSERT INTO CONHECIMENTO_CARGA VALUES(' + Convert(varchar(6),cod_indice) + ',' + titulo + ','+
tipo + ',' + convert(varchar(6),num_max) + ',' + aplicacao + ','+mascara + ',' + convert(varchar(6),qtd_caracter) + ')'
from indice

Pjava
   - 26 jul 2011

O que passa é quando ele acha campos NULL, ele não preenche os demais, ou seja, vem tudo null. Essa tabela tem 16 registros, e apenas duas tuplas que não tem nenhum, foi mostrada.

Emerson
   - 26 jul 2011

a ação vai depender do que você quer fazer no caso de campos nulos:

1. não gera a linha
2. gera com valores default

no segundo caso você pode usar a função COALESCE(). ela retorna o primeiro valor não-nulo da lista.
assim:

select 'INSERT INTO CONHECIMENTO_CARGA VALUES(' + Convert(varchar(6),coalesce(cod_indice,0)) + ',' + coalesce(titulo,'sem titulo') + ',' +
coalesce(tipo,'sem tipo') + ',' + convert(varchar(6),coalesce(num_max,100)) + ',' + coalesce(aplicacao,'sem aplicacao') + ','+ coalesce(mascara,'sem mascara') + ',' + convert(varchar(6),coalesce(qtd_caracter,0)) + ')'
from indice

Gabriel Soares
   - 10 nov 2011

Olá!
Uma função que geralmente utilizo nestes casos é a ISNULL.
Ela busca os valores nulos na tabela e substitui pelo que você colocar como parâmetro.
Sintaxe: ISNULL(coluna_que_contém_nulos, valor_subtituto)

Ex.:
select ISNULL(cast(REGRANOVA as varchar(500)), TESTE ) from REGRASNOVAS --> Em todos os campos que tiver "NULL", vai ser trocado por "TESTE".

Espero que ajude.

Gabriel Soares
   - 10 nov 2011

No seu código, considerando que todas as colunas tenham pelo menos um registro null.
Substituindo os mesmo pelo testo "NULL", ficaria assim.

select insert into conhecimento_carga values( + isnull(convert(varchar(6),cod_indice), null + , +
isnull(titulo,null) + , + isnull(tipo,null) + , +
isnull(convert(varchar(6),num_max),null)
+ , + isnull(aplicacao,null) + , + isnull(mascara,null) + , +
isnull(convert(varchar(6),qtd_caracter),null) + ) from indice

Abraço!