none
CHAR(13).. QUAL A SUA REAL FINALIDADE? RRS feed

  • Pergunta

  • Olá, galera!.

    eu gostaria de realizar quebra de linha sendo que em cada linha hávera 90 caracteres.

    pelo que eu entendi o char(13) é responsável por isso.. porém não entendi o seu funcionamento..

    gostaria de mais esclarecimentos!


    priscila henriques

    quarta-feira, 8 de fevereiro de 2012 13:19

Respostas

  • Vamos por partes:

    A variavel que vc preenche @MONTAR_ARQUIVO é apenas para imprimir o cabeçalho correto?

    O char(13) pode entrar no fim do select desta forma:

    set @MONTAR_ARQUIVO = 'bcp 
    		"SELECT ''Ref. Carta GCONF Nº '' + 
    		SUBSTRING(CONVERT(VARCHAR(4),ANO),1,4)+ ''/'' + 
    		CONVERT(VARCHAR(2),NUMERO) ,DATA_EMISSAO, CABECALHO + CHAR(13)
    		FROM Reqjud.dbo.OFICIO_MODELO where id_oficio_modelo = 
    		'''+ CONVERT(VARCHAR(2),@ID_OFICIO_MODELO) + ''' " 
    		queryout ' + @MONTAR_ARQUIVO + ' -c -C ACP -t \n -S ' 
    		+ @@SERVERNAME + ' -T'

    Eu não entendi porque vc utiliza a mesma variavel depois do queryout que teoricamente deveria ter o nome do arquivo onde os dados seriam exportados.

    Abs.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    quarta-feira, 8 de fevereiro de 2012 17:52

Todas as Respostas

  • O CHAR é uma função que retorna um caracter baseado no código que você passa como parâmetro. No caso do 13, o CHAR retorna o ENTER. Portanto, funciona como uma quebra de linha.

    Leonardo Borges 'Xis'
    "Mas a persistência é o que leva a perfeição."
    Se a resposta for útil, marque-a. Poderá ser útil para outros desenvolvedores.

    quarta-feira, 8 de fevereiro de 2012 13:35
  • Perfeito, Leonardo! A quebra de linha ocorre por campo ou posso realizar N quebras de linha dentro de um campo. Ou as duas formas estão corretas? A pergunta está sendo realizada porque o char(13) não está refletindo no meu arquivo. A) Select utilizados: "SELECT ''Ref. Carta GCONF Nº '' + SUBSTRING(CONVERT(VARCHAR(4),ANO),1,4)+ ''/'' + CONVERT(VARCHAR(2),NUMERO) ,DATA_EMISSAO,SUBSTRING(CABECALHO,1,50) + CHAR(13) + SUBSTRING(CABECALHO,51,100) FROM Reqjud.dbo.OFICIO_MODELO where id_oficio_modelo = '''+ CONVERT(VARCHAR(2),@ID_OFICIO_MODELO) + ''' " queryout ' + @MONTAR_ARQUIVO + ' -c -C ACP -t \n -k -S ' + @@SERVERNAME B) Dentro do arquivo não sendo realizado a quebra de linha o que está retornando no me arquivo: Ref. Carta GCONF Nº 2010/14 2011-10-26 00:00:00.000 Ao Poder Judiciário do estado da Bahia 1ª Vara de (X) Família, Sucessões, Òrfãos, Interditos e Ausentes da Comarca de Salvador A/C juiz Adenilson Barbos. onde eu marquei com (x) significa que o char(13) está sendo entendido como um caractere estranho.como trabalhar com quebra de linha quando se trata de BCP? att,

    priscila henriques

    quarta-feira, 8 de fevereiro de 2012 14:10
  • Galera, não sei porque está saindo assim a formatação do meu texto!..não dá para entender muito está faltando a quebra de linha.. desculpe aí. =/

    priscila henriques

    quarta-feira, 8 de fevereiro de 2012 14:13
  • Priscila o char(13) geralmente é utilizado para informar que conjunto de caracteres terá uma quebra de linha. Eu particulamente utilizei o char(13) no SQL em dois momentos:

    1 - Para exportar arquivos textos com tamanho fixo via SSIS,  colocando o char(13) no último campo para realizar a quebra da linha.

    2 - Procurar o caracter 13 em campos tipo texto para substituição.

    Se o seu objetivo é quebrar as linhas dentro do arquivo texto o BCP através da opção -c já inclui o char(13) no final de cada linha.

    Se o seu objetivo não for este, por favor, poste maiores detalhes sobre sua necessidade.

    Abs.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    quarta-feira, 8 de fevereiro de 2012 14:38
  • bcp "select * from temp.dbo.Plan1" queryout Contacts.txt -c -T
    


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    quarta-feira, 8 de fevereiro de 2012 14:40
  • Eduardo!. o que eu desejo é que dentro do meu arquivo cada linha tenha 90 caracteres. existe a possibilidade fazer isso? atráve do bcp. eu utlizei o substring para isso, estaria correto! = SUBSTRING(CABECALHO,1,50) + CHAR(13) + SUBSTRING(CABECALHO,51,100) att,

    priscila henriques

    quarta-feira, 8 de fevereiro de 2012 14:46
  • Eduardo, eu simulei no console o select que você postou. a parti de que parâmetros é realizado a quebra de linha quando se trata do -c?. eu utilizei o /n e a quebra foi realizada por campo. a minha tabela tem 6 campos então será realizada 6 quebras de linha. att,

    priscila henriques

    quarta-feira, 8 de fevereiro de 2012 14:55
  • Priscila, pelo que entendi os seus dados estão numa linha só e vc deseja quebrar esta linha em várias a cada 90 caracteres. É isso?

    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    quarta-feira, 8 de fevereiro de 2012 15:08
  • é isso!.. no meu select : set @MONTAR_ARQUIVO = 'bcp "SELECT ''Ref. Carta GCONF Nº '' + SUBSTRING(CONVERT(VARCHAR(4),ANO),1,4)+ ''/'' + CONVERT(VARCHAR(2),NUMERO) ,DATA_EMISSAO, CABECALHO FROM Reqjud.dbo.OFICIO_MODELO where id_oficio_modelo = '''+ CONVERT(VARCHAR(2),@ID_OFICIO_MODELO) + ''' " queryout ' + @MONTAR_ARQUIVO + ' -c -C ACP -t \n -S ' + @@SERVERNAME + ' -T' exec master..xp_cmdshell @MONTAR_ARQUIVO eu coloquei \n, até ai tudo bem. é isso que eu queria.. so que tem um campo chamado text na tabela que possui muitos das e quando é exportado para o arquivo este mesmo não faz a quebra de linha, porque (\n) e uma quebra de linha feita por campo. como eu poderia fazer um quebra de linha internamente em um campo?.. aí nesta caso entraria o char(13), só que a quebra não é realizada. att

    priscila henriques

    quarta-feira, 8 de fevereiro de 2012 15:23
  • Eduardo!. no arquivo vem assim: Ref. Carta GCONF Nº 2010/50 2011-10-26 00:00:00.000 Ao Poder J [] o [] - e o char(13).. é interpretado desta forma!

    priscila henriques

    quarta-feira, 8 de fevereiro de 2012 15:28
  • Vamos por partes:

    A variavel que vc preenche @MONTAR_ARQUIVO é apenas para imprimir o cabeçalho correto?

    O char(13) pode entrar no fim do select desta forma:

    set @MONTAR_ARQUIVO = 'bcp 
    		"SELECT ''Ref. Carta GCONF Nº '' + 
    		SUBSTRING(CONVERT(VARCHAR(4),ANO),1,4)+ ''/'' + 
    		CONVERT(VARCHAR(2),NUMERO) ,DATA_EMISSAO, CABECALHO + CHAR(13)
    		FROM Reqjud.dbo.OFICIO_MODELO where id_oficio_modelo = 
    		'''+ CONVERT(VARCHAR(2),@ID_OFICIO_MODELO) + ''' " 
    		queryout ' + @MONTAR_ARQUIVO + ' -c -C ACP -t \n -S ' 
    		+ @@SERVERNAME + ' -T'

    Eu não entendi porque vc utiliza a mesma variavel depois do queryout que teoricamente deveria ter o nome do arquivo onde os dados seriam exportados.

    Abs.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    quarta-feira, 8 de fevereiro de 2012 17:52
  • olá, Eduardo..

    eu não sei o que acontece..

    no trabalho tudo que eu posto fica desformatado e não tenho a opção de formatação, devido a isto as pessoas do fórum não conseguem entender. Vou verificar se é o bloqueio ou navegador.

    o meu código é este:

    set @MONTAR_ARQUIVO = 'bcp "SELECT ''Ref. Carta GCONF Nº '' + SUBSTRING(CONVERT(VARCHAR(4),ANO),1,4) + ''/'' + CONVERT(VARCHAR(10),NUMERO) ,DATA_EMISSAO,CABECALHO FROM Reqjud.dbo.OFICIO_MODELO where id_oficio_modelo =  '''+ CONVERT(VARCHAR(2),@ID_OFICIO_MODELO) + ''' " queryout ' + @MONTAR_ARQUIVO 

                                    + ' -c  -C ACP -k -t \n -S ' 
                                    + @@SERVERNAME 
                                    + ' -T'

     exec master..xp_cmdshell @MONTAR_ARQUIVO,

    Eduardo irei fazer o que você disse e te dou uma resposta.

    Obrigada, mesmo.



    priscila henriques

    quarta-feira, 8 de fevereiro de 2012 22:38
  • Priscila, deu certo?

    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    quinta-feira, 9 de fevereiro de 2012 13:46
  • Olá, Eduardo..

    deu certo sim!.. as quebras são realizadas.

    Só que tenho que definir a quantidade de linha que terá o arquivo..

    quanto a pergunta que eu fiz, está resolvido.

    obrigada, Eduardo! =)


    priscila henriques

    quinta-feira, 9 de fevereiro de 2012 23:21