Array
(
)

Problemas (SQL Server 2005)

Carlos Souza
   - 29 mar 2011

Pessoal, tudo certo?

Seguinte tenho um problema com o SQL Server 2005 e não faço a mínima de como resolver.

Tenho a versão do SQL Server 2005 Express instalada na minha máquina, e executo nela um comando assim:

UPDATE TABELA SET  CAMPO = '   ' WHERE CODIGO = 1

Eu quero inserir em um campo três espaços em branco. Esse campo é um VARCHAR(3). Isso funciona OK na minha versão Express.

Quando executo o mesmo procedimento em um dos nossos servidores com a versão Enterprise do SQL Server, ele não se comporta da mesma forma.

Ao invés de inserir os três espaços em branco, ele inseri apenas 1.

O que pode ser??? Alguma configuração???

Valeu pessoa !!

Wilson Paulista...!!!
   - 29 mar 2011

Campos VARCHAR, são variáveis, ou seja, ele retira os espaços em branco do final, para ocupar menos espaço no banco de dados, ao contrário dos campos CHAR que ocupam exatamente o que está escrito.

Espero ter colaborado.

Carlos Souza
   - 29 mar 2011

Obrigado pela resposta !!

Mas nesse caso o problema não é esse. Porque um caracter em branco é um caracter em branco. O Banco não ignora esse tipo de informação. 

O que o campo VARCHAR faz é: caso ele tenha um tamanho 10 e eu passe uma informação de tamanho 5, ele ocupa apenas 5 espaços deixando 5 livre. Já um campo CHAR ocuparia os 10 espaços independentemente do que eu informar.

Tanto que na minha versão SQL Server 2005 Express o comando funciona OK.

Me ajudem por favor !!!

Wilson Paulista...!!!
   - 29 mar 2011

Onde você está executando este seu UPDATE (qual ferramenta)?

Pois dependendo da ferramenta que vc utiliza, a mesma pode retirar os espaços em branco do final, já passei por isto.

Espero ter colaborado.

Carlos Souza
   - 29 mar 2011

Pelo Management Studio !! Nos dois locais executo o procedimento por ele !!

Será que isso pode ser alguma propriedade do banco??

Eu comparei as propriedade da versão 2005 Express (onde o comando funciona) com a versão 2005 Enterprise (onde não funciona) e aparentemente estão iguais !!

Ta me lascando isso !!

Carlos Souza
   - 30 mar 2011

Pessoal, segue a resposta ao meu problema !!

***********

Exec sp_help <NomeDaTabela>

Provavelmente, na versão Express, você terá a opção TrimTrailingBlanks, correpondente à coluna da sua tabela que está sendo atualizada, como "no" e na versão Enterprise estará como "yes".

Quando está propriedade está definida como 'yes', ao gravar os dados na tabela o SQL Server retira os espaços em branco após a string. Por exemplo: 'valor 1 ', será gravado como 'valor 1'. Porém, quando a propriedade estiver como 'no' os dados serão gravados com os espaços no fim.

Se este realmente for o seu problema, você pode alterar esta propriedade efetuando um alter na coluna que você está tentando atualizar, porém, deve especificar antes

SET ANSI_PADDING ON

conforme o exemplo do Marcelo.

Quando você criar ou alterar uma coluna de uma tabela com a opção ANSI_PADDING ON, essas colunas armazenaram os espaços em branco após o texto. Agora, se você utilizar a opção ANSI_PADDING OFF, o SQL Server descartará os espaços após o texto.

Ex para alterar o propriedade para que passe a armazenar os espaços em branco após o texto:

SET ANSI_PADDING ON
Go
ALTER TABLE <Tabela> ALTER COLUMN <Coluna> <Tipo> [Constraints]