Neste banco de dados SQL Server 2008 (build 10.0.1600) ativo, há uma Events
tabela que contém uma text
coluna chamada Details
. (Sim, eu sei que isso deveria ser uma varchar(MAX)
coluna, mas quem configurou este banco de dados não fez dessa forma.)
Esta coluna contém registros muito grandes de exceções e dados JSON associados que estou tentando acessar por meio do SQL Server Management Studio, mas sempre que copio os resultados da grade para um editor de texto, ele os trunca em 43679 caracteres.
Eu li em vários locais na Internet que você pode definir o máximo de caracteres recuperados para dados XML Tools > Options > Query Results > SQL Server > Results To Grid
como Ilimitado e, em seguida, executar uma consulta como esta:
select Convert(xml, Details) from Events
where EventID = 13920
(Observe que os dados em coluna não são XML de forma alguma. CONVERT
Transformar a coluna em XML é apenas uma solução alternativa que descobri no Google que alguém usou para contornar o limite que o SSMS tem de recuperar dados de uma coluna text
ou varchar(MAX)
.)
No entanto, após definir a opção acima, executar a consulta e clicar no link do resultado, ainda recebo o seguinte erro:
Incapaz de mostrar XML. Ocorreu o seguinte erro: Ocorreu um fim de arquivo inesperado. Linha 5, posição 220160.
Uma solução é aumentar o número de caracteres recuperados do servidor para dados XML. Para alterar essa configuração, no menu Ferramentas, clique em Opções.
Então, alguma ideia de como acessar esses dados? Converter a coluna varchar(MAX)
resolveria minhas aflições?
fonte
CDATA
pode funcionar, mas se seus dados incluem caracteres de controle, você deve realizar uma operação de substituição. No meu caso, estava usando o Separador de Unidade, Código ASCII 31, em meus dados. Como eu estava usando apenas aquele personagem em muitos lugares, um simplesREPLACE(details, char(31), '&x1f;')
bastou. Se eu tivesse caracteres desconhecidos ou um grande número de caracteres diferentes para substituir, talvez tivesse que encontrar outra solução.CDATA
coisa foi minha primeira sugestão. O últimoAS [processing-instruction(x)]
evita isso.Consegui fazer isso funcionar ...
fonte
Uma alternativa é clicar com o botão direito do mouse no conjunto de resultados e selecionar "Salvar resultados como ...". Isso o exporta para um arquivo CSV com todo o conteúdo da coluna. Não é perfeito, mas funcionou bem o suficiente para mim.
fonte
Você tentou esta solução simples? Apenas 2 cliques de distância!
Na janela de consulta,
Você obterá todo o texto que deseja ver no arquivo !!! Posso ver 130.556 caracteres para o meu resultado de um campo varchar (MAX)
fonte
A solução mais simples que encontrei é fazer o backup da tabela e visualizar o script. Para fazer isso
Tasks
>Generate Scripts...
Next
Select specific database objects
e selecione sua mesa.Next
Save scripts to a specific location
Save to file
e preencha as opções relacionadasAdvanced
botãoGeneral
>Types of data to script
paraData only
ouSchema and Data
e clique em okNext
fonte
O tipo de dados TEXT é antigo e não deve ser mais usado, é difícil selecionar dados em uma coluna TEXT.
ntext, text e image (Transact-SQL)
você precisa usar TEXTPTR (Transact-SQL) para recuperar os dados de texto.
Consulte também este artigo sobre como lidar com o tipo de dados de texto .
fonte
varchar(MAX)
impedirá o SSMS de truncar os dados dela?Parece que o Xml pode não estar bem formado. Se for esse o caso, você não poderá convertê-lo como Xml e, por isso, você está limitado em quanto texto pode retornar no Management Studio. No entanto, você pode quebrar o texto em pedaços menores, como:
Em seguida, você precisará combiná-los manualmente novamente.
EDITAR
Parece que há alguns caracteres nos
text
dados dos quais o analisador Xml não gosta. Você pode tentar converter esses valores em entidades e, em seguida, tentar oConvert(xml, data)
truque. Então, algo como:(Eu precisei converter em varchar (max) porque a função de substituição não funcionará em
text
colunas. Não deve haver nenhum motivo para você não poder converter essastext
colunasvarchar(max)
.)fonte
text
ouvarchar(MAX)
.TSQL
de @IanQuigley com base nesta resposta funcionou bem para mim. Basicamente, peguei os resultados (acabei sendo 11 registros) e apenas colei-os no Bloco de Notas. Funcionou perfeitamente. Precisa salvar este script. Eu tinha um XML muito longo que incluía caracteres inválidos.Eu prefiro este simples hack XML que torna as colunas clicáveis no SSMS em uma base célula por célula. Com este método, você pode visualizar seus dados rapidamente na visualização tabular do SSMS e clicar em células específicas para ver o valor total quando forem interessantes. Isso é idêntico à técnica do OP, exceto que evita os erros de XML.
fonte
NVARCHAR
/VARCHAR
. Por exemplo, o caractere NUL (diferente deNULL
como um valor para o campo). O elenco falhará para strings com tais valores incorporados.A partir do SSMS 18.2, agora você pode visualizar até 2 milhões de caracteres nos resultados da grade. Fonte
Eu verifiquei isso com o código abaixo.
fonte
Você está sem sorte, eu acho. O problema não é um problema de nível de SQL, como todas as outras respostas parecem se concentrar, mas simplesmente um problema da interface do usuário. O Management Studio não se destina a ser uma interface de acesso de dados genérica / de propósito geral. Não existe para ser sua interface, mas sua área administrativa, e tem sérias limitações ao lidar com dados binários e grandes dados de teste - porque as pessoas que os usam dentro do perfil de uso especificado não terão esse problema.
Apresentar dados de texto grandes simplesmente não é o uso planejado.
Sua única opção seria uma função com valor de tabela que pega a entrada de texto e corta as linhas para cada linha, de modo que o Management Studio obtenha uma lista de linhas, não uma única linha.
fonte