Simptomi
Pieņemiet, ka programmā Microsoft SQL Server 2012 vai SQL Server 2014 datu pakalpojumi (MDS) tiek izveidots skaitlisks atribūts, izmantojot MDS tīmekļa pakalpojumu. Kad mēģināt norādīt papildu ciparus pa labi no decimālzīmes, tiek aprēķināta nepareiza precizitāte. Piemēram, ja mēģināt izveidot decimāldaļu atribūtu, kuram ir 16 skaitļu precizitāte, rīkojieties šādi:
MetadataAttribute newAttribute = new MetadataAttribute(); newAttribute.DataType = AttributeDataType.Number; newAttribute.DataTypeInformation = 16;
Tiek izveidota kolonna, kurā ir pareizais 16 un nepareizas precizitātes diapazons 22.
Cēlonis
Problēma rodas tāpēc, ka iekšējai MDS saglabātai procedūrai, veidojot atribūtu, tiek izmantots nepareizs precizitātes aprēķins. Precizitāte tiek aprēķināta kā 38 mīnus skala, kas nav pareiza.
Risinājums
Šī problēma pirmo reizi tika izlabota tālāk sniegtajā SQL Server kumulatīvajā atjauninājumā.
Kumulatīvais atjauninājums 1 SQL Server 2014 /en-us/help/2931693
Kumulatīvais atjauninājums 9 SQL Server 2012 SP1 /en-us/help/2931078
Katrā jaunajā kumulatīvajā SQL Server atjauninājumā ir iekļauti visi labojumfaili un visi drošības labojumi, kas bija iekļauti iepriekšējā kumulatīvajā atjauninājumā. Skatiet jaunākos kumulatīvos atjauninājumus SQL Server:
Risinājums
Lai novērstu šo problēmu, izmantojiet tālāk norādītās metodes, kas tiek novērtētas atbilstoši jūsu situācijai.
-
SQL Server 2014 lietojiet labojumu.
-
Ja lietojat SQL Server 2012, mainiet saglabātās procedūras, lai izmantotu konstantu vērtību 38 (max, ko pieļauj SQL Server 2012), nevis atņemtu skalu (@DataTypeInformation utt.) no precizitātes.
Statusa
Microsoft ir apstiprinājusi, ka šī problēma pastāv Microsoft produktos, kas ir norādīti sadaļā "attiecas uz".