Como remover espaços à direita do nome de arquivo lógico do SQL Server?

1

Estou lidando com um servidor que executa o SQL Server 2000 SP1 e os nomes de arquivos lógicos para um dos bancos de dados parecem conter espaços à direita. Ou seja, esta consulta:

select replace(name, ' ', 'X') from sysfiles

Retorna os nomes esperados mais uma longa sequência de Xs.

Como posso lidar com isso? Eu tentei executar o comando ALTER DATABASE ... MODIFY FILE usando o nome (com e sem espaços) e recebo uma mensagem de erro informando que o arquivo não existe.

    
por Luke Girvin 25.11.2009 / 11:15

1 resposta

1

Isso não se deve ao fato de que os nomes têm espaços, é devido ao fato de o Sql Server armazenar esses dados em um campo do tipo nchar (128), que é um tipo de dados de caractere de largura fixa (ou seja, os dados armazenados sempre terão 128 caracteres, preenchidos com espaços, se necessário). Portanto, quando você consultar esse valor, sempre obterá um tipo com 128 caracteres de comprimento. Se você deseja aparar o preenchimento do espaço à direita do tipo de dados, simplesmente converta-o em um tipo de dados de comprimento variável ou apare explicitamente, desta forma:

select cast(name as nvarchar(128)) as name from sysfiles

ou

select rtrim(name) as name from sysfiles

ou se você planeja inserir em outra tabela, ela será convertida implicitamente se o tipo de dados de destino for de tamanho variável e compatível:

create table #files (name nvarchar(128));
insert #files (name) select name from sysfiles;
select name from #files;

Se você modificar um pouco sua afirmação acima, você deve notar que não há mais nenhum X:

select replace(cast(name as nvarchar(128)), ' ', 'X') from sysfiles
    
por 25.11.2009 / 16:49

Tags