Sintomas
Assuma que cria um atributo numérico no Microsoft SQL Server 2012 ou NO SQL Server 2014 Master Data Services (MDS) utilizando o Serviço Web MDS. Quando se tenta especificar mais dígitos para o lado direito dos pontos decimais, calcula-se a precisão incorreta. Por exemplo: Quando se tenta criar um atributo decimal que tenha 16 dígitos de precisão fazendo:
MetadataAttribute newAttribute = new MetadataAttribute(); newAttribute.DataType = AttributeDataType.Number; newAttribute.DataTypeInformation = 16;
É criada uma coluna que tem a escala correta de 16 e precisão incorreta de 22.
Causa
O problema ocorre porque um procedimento interno armazenado de MDS utiliza o cálculo de precisão errado quando cria o atributo. A precisão é calculada como 38 menos a escala, o que é incorreto.
Resolução
O problema foi corrigido pela primeira vez na seguinte atualização cumulativa do SQL Server.
Atualização Cumulativa 1 para SQL Server 2014 /en-us/help/2931693
Atualização Cumulativa 9 para SQL Server 2012 SP1 /en-us/help/2931078
Cada nova atualização cumulativa do SQL Server contém todos os hotfixes e todas as correções de segurança que foram incluídas com a atualização cumulativa anterior. Confira as últimas atualizações cumulativas do SQL Server:
Solução
Para contornar a questão, utilize os seguintes métodos que são apreciados pela sua situação:
-
Para o SQL Server 2014, aplique a correção.
-
Para o SQL Server 2012, altere os procedimentos armazenados para utilizar um valor constante de 38 (máximo permitido pelo SQL Server 2012) em vez de uma escala subtraída (@DataTypeInformation, e assim por diante) a partir da Precisão.
Estado
A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados na secção "Aplica-se a".