Kbase 44410: Erro Bucar Registro Ambiente SQL Server
Autor |
  Marco Aurelio Scheidt - CAT |
Acesso |
  Público |
Publicação |
  7/4/2013 |
|
Ambiente:
EMS 2.06B - SQL Server
Problema:
Código de página definido incorretamente no banco de dados SQL Server do cliente.
Collation nada mais é do que a maneira que você armazena e trabalha com os tipos do dados do SQL Server que armazenam Strings.
A Collation também interfere na sua aplicação, podendo gerar diversos efeitos como a modificação de instruções enviadas para o SQL Server e a ordem de retorno de informações.
Uma Collation possui um nome e um conjunto de propriedades que a define. São basicamente três as principais propriedades de uma Collation:
1. Código de página (ou Character Set) para armazenar os caracteres não Unicode.
2. Sort Order para tipos de dados Unicode.
3. Sort Order para tipos de dados não Unicode.
Neste caso foi identificado que no cliente a coluna ?un" estava com o COLLATE ?SQL_1xCompat_CP850_CI_AS? , onde este tipo de configuração valida maiúsculo de minúsculo e ao passar o ?pç? no programa 4gl não achava o registro, mas achava ao informar ?PÇ?.
FIND FIRST tab-unidade WHERE
tab-unidade.un = "pç" NO-LOCK NO-ERROR.
IF AVAIL tab-unidade THEN
MESSAGE "Achou unidade de medida" VIEW-AS ALERT-BOX.
ELSE
MESSAGE "Não achou unidade de medida" VIEW-AS ALERT-BOX.
Solução:
Enviado o script abaixo para alterar o COLLATE para ?SQL_Latin1_General_CP1_CI_AS?
ALTER TABLE tab_unidade
ALTER COLUMN un VARCHAR(16) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
GO
ALTER TABLE tab_unidade
ALTER COLUMN descricao VARCHAR(120) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
GO
ALTER TABLE tab_unidade
ALTER COLUMN char_1 VARCHAR(800) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
GO
ALTER TABLE tab_unidade
ALTER COLUMN char_2 VARCHAR(800) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
GO
ALTER TABLE tab_unidade
ALTER COLUMN check_sum VARCHAR(160) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
GO
Obs.: caso alguma das colunas fizerem parte de um índice será necessário eliminar o índice, alterar o valor do COLLATE e depois recriar o índice.