Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

brunoguitarman

Problemas com ISNULL gerando TXT

Recommended Posts

Antes de partimos por CURSOR só mais um coisa.Em que linha do SELECT post inicialmente esta sendo feita a concatenação dos campos que estão estourando?Ou é a concatenção de todos os campos que esta dando 1156 caracteres?t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seguinte, só pra deixar mais claro e organizado:

 

Este é o código que estou usando no momento:

 

SELECT  isnull(convert(varchar(5),replicate('0',(5 - Len(convert(varchar,terreno.nrideter)))) + convert(varchar,terreno.nrideter)),'') + 	isnull(convert(varchar(3),replicate('0',(3 - Len(convert(varchar,terreno.nrincter)))) + convert(varchar,terreno.nrincter)),'') +	isnull(terreno.dsideter, replicate(' ',200))+	isnull(terreno.dssitter, replicate(' ',15)) + 	isnull(localizacao.nmidepla, replicate(' ',100)) +	isnull(terreno.dsbaiter, replicate(' ',50)) +	isnull(terreno.dslotter, replicate(' ',50)) +	isnull(terreno.dsquater, replicate(' ',50)) +	isnull(terreno.dsqtrter, replicate(' ',200)) +	isnull(terreno.dscerter, replicate(' ',50)) +	isnull(terreno.vlareter, replicate(' ',20)) +	isnull(terreno.dsocuter, replicate(' ',20)) +	isnull(terreno.dsdecter, replicate(' ',20)) +	isnull(Convert(varchar(8),Convert(varchar(12),terreno.dtdecter,112)), replicate(' ',8)) +	isnull(terreno.dssenter, replicate(' ',20)) +	isnull(terreno.dstitter, replicate(' ',20)) +	isnull(Convert(varchar(8),Convert(varchar(12),terreno.dttitter,112)), replicate(' ',8)) +	isnull(terreno.dszonter, replicate(' ',20)) +	isnull(terreno.dsmatter, replicate(' ',20)) +	isnull(Convert(varchar(8),Convert(varchar(12),terreno.dtmatter,112)), replicate(' ',8)) +	isnull(terreno.dslivter, replicate(' ',20)) +	isnull(terreno.dsfolter, replicate(' ',20)) +	isnull(terreno.dsobster, replicate(' ',200)) +	isnull(Convert(varchar(8),Convert(varchar(12),terreno.dtaquter,112)), replicate(' ',8)) +	isnull(replicate('0',(12 - len(convert(varchar,terreno.vlaquter,2)))) + (convert(varchar,terreno.vlaquter,2)),replicate(' ',12)) +	isnull(Convert(varchar(8),Convert(varchar(12),terreno.dtinidep,112)), replicate(' ',8))FROM	ZCBP7130 as terreno,	ZCBP7040 as localizacaoWHERE   terreno.multiusu = 720 and	terreno.cdidebai = 0 and	localizacao.multiusu = 720 and	localizacao.cdideloc = terreno.cdideloc

Ou seja, o primeiro campo tem que ter 5 caracteres, o segundo tem que ter 3, o terceiro, 200, o quarto, 15 e assim sussecivamente. Assim sendo, o "corte" começa no campo "localizacao.nmidepla", mostrando a conteúdo desse campo, que tem tamanho 100, somente até a posição 32, pois é nela que são completadas as 255 posições visíveis.

 

Caso, ao invés de, na quarta linha, após isnull(terreno.dssitter, replicate(' ',15)) eu colocar uma vírgula, ao invés do sinal de concatenação, o campo "localizacao.nmidepla" será mostrado por inteiro, mas em outra coluna e, quando essa outra coluna chegar a 255 caracteres, o campo que estiver nessa posição será cortado e por aí vai.

 

Dessa forma, para realmente mostrar os 1155 caracteres que preciso, teria que ir dividindo as colunas resultantes para que não ultrapassem 255 caracteres, mas isso me levaria devolta ao problema inicial que deixa um espaço em branco entre as colunas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Camarada,

 

Não me lembro de nada parecido.

 

Ja tive um problema com tamanho mas na aplicação (ASP) mas era problema de MDAC e drive ODBC desatualizado, o q não me parece seu caso.

 

Bom pensei em um paliativo:

CREATE TABLE #TMP (JUNTA_TUDO VARCHAR(4000))INSERT INTO #TMP (JUNTA_TUDO)SELECT  isnull(convert(varchar(5),replicate('0',(5 - Len(convert(varchar,terreno.nrideter)))) + convert(varchar,terreno.nrideter)),'') +	isnull(convert(varchar(3),replicate('0',(3 - Len(convert(varchar,terreno.nrincter)))) + convert(varchar,terreno.nrincter)),'') +	isnull(terreno.dsideter, replicate(' ',200))+	isnull(terreno.dssitter, replicate(' ',15)) +	isnull(localizacao.nmidepla, replicate(' ',100)) +	isnull(terreno.dsbaiter, replicate(' ',50)) +	isnull(terreno.dslotter, replicate(' ',50)) +	isnull(terreno.dsquater, replicate(' ',50)) +	isnull(terreno.dsqtrter, replicate(' ',200)) +	isnull(terreno.dscerter, replicate(' ',50)) +	isnull(terreno.vlareter, replicate(' ',20)) +	isnull(terreno.dsocuter, replicate(' ',20)) +	isnull(terreno.dsdecter, replicate(' ',20)) +	isnull(Convert(varchar(8),Convert(varchar(12),terreno.dtdecter,112)), replicate(' ',8)) +	isnull(terreno.dssenter, replicate(' ',20)) +	isnull(terreno.dstitter, replicate(' ',20)) +	isnull(Convert(varchar(8),Convert(varchar(12),terreno.dttitter,112)), replicate(' ',8)) +	isnull(terreno.dszonter, replicate(' ',20)) +	isnull(terreno.dsmatter, replicate(' ',20)) +	isnull(Convert(varchar(8),Convert(varchar(12),terreno.dtmatter,112)), replicate(' ',8)) +	isnull(terreno.dslivter, replicate(' ',20)) +	isnull(terreno.dsfolter, replicate(' ',20)) +	isnull(terreno.dsobster, replicate(' ',200)) +	isnull(Convert(varchar(8),Convert(varchar(12),terreno.dtaquter,112)), replicate(' ',8)) +	isnull(replicate('0',(12 - len(convert(varchar,terreno.vlaquter,2)))) + (convert(varchar,terreno.vlaquter,2)),replicate(' ',12)) +	isnull(Convert(varchar(8),Convert(varchar(12),terreno.dtinidep,112)), replicate(' ',8))FROM	ZCBP7130 as terreno,	ZCBP7040 as localizacaoWHERE   terreno.multiusu = 720 and	terreno.cdidebai = 0 and	localizacao.multiusu = 720 and	localizacao.cdideloc = terreno.cdidelocSELECT * FROM #TMPDROP TABLE #TMP

A idéia é criar um tabela temporária e jogar todos os campo concatenados em um único campo JUNTA_TUDO (parecido com o exemplo que postei) e depois manipular a tabela temporário exportando-a. Acho que resolverá seus problemas.

 

O uso de CURSOR acho mais complicado e talvez de performance inferior.

 

Tenta ai a tabela temporária.

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Camarada,

 

Mto estranho!

 

Realmente trunca em 256!

 

Bom farei uns teste e trocarei uma idéia com os brother´s e veremos a q conclusão chegamos.

 

Vamos esperar quem sabe alguém pode nos ajudar.

 

Mas não vamso desistir. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Camarada,

 

Estava verificando o menu "Options" (ctrl+shift+o) do Query Analyzer e achei um aba "Results" o campo "Maximum character per column" dai alterei para 4000.

 

Ai consegui concatenar 3 string que com um tamanho de 800 caracteres e não truncou nada. Inclusive exportei para txt tranquilis.

 

Faça o teste alterando a configuração de seu QA com indicado.

 

Acho que nem vai precisar de criar a tabela temporária.

 

Acho que é isso.

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente é isso, valeu aí!Só por curiosidade: quando eu passo o resultado pra um arquivo texto, ele tem quebra de linha depois do caractere 1024. Tem como mudar isso pra não ter essa quebra, pra que possa aparecer os 1155 caracteres na mesma linha?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.