Переменная в виде числа, отправляемого в хранимую процедуру (SQL Server 2005) - PullRequest
1 голос
/ 09 апреля 2010

Я вижу, что в SQL Server 2005 вы можете передать параметр в виде числа, например

create procedure dbo.TestSP
 @Param1     numeric
as

Но что это значит? Например. Числовой (10,0), Числовой (9,2) и т. Д. У нас есть некоторые Разработчики, которые используют это вместо правильного определения поля, против которого этот параметр будет использоваться, например. вместо использования Numeric (10, 0) для параметра @ Param1.

Также существуют ли какие-либо проблемы с производительностью при использовании числового значения вместо типа данных, определенного для поля в таблице?

Большое спасибо.

Ответы [ 4 ]

3 голосов
/ 09 апреля 2010

по умолчанию 18,0, если вы не указываете масштаб или точность

Также существуют ли какие-либо проблемы с производительностью при использовании Numeric вместо типа данных, определенного для поля в таблице?

Вы можете получить конверсии, которые могут замедлить ваш запрос

2 голосов
/ 09 апреля 2010

Ваши разработчики используют плохую практику программирования. При определении переменной всегда делайте ее максимально совпадающей с полем, с которым она будет использоваться, и никогда не ошибайтесь в правильном определении определения, иначе вы можете получить непредвиденные сокращения данных. Такое использование чисел достаточно плохо, но они, вероятно, поймут, что десятичные дроби усекаются при проверке их результатов. Когда они делают то же самое неаккуратное программирование с использованием varchars, они также получают усеченные значения, но могут не заметить их так легко. В обзоре кода я бы настаивал на том, чтобы они исправили этот мусор и перестали быть ленивыми и некомпетентными.

2 голосов
/ 09 апреля 2010

Согласно Электронной документации по SQL Server на MSDN точность по умолчанию равна 18, а масштаб по умолчанию равен 0, поэтому

NUMERIC    is equal to   NUMERIC(18,0)
1 голос
/ 09 апреля 2010

как уже сказано, numeric без numeric(precision,scale) по умолчанию numeric(18,0)

Однако, чмокните этих ленивых программистов! , если им действительно нужны 18 цифр, используйте bigint !!

В противном случае используйте тип данных правильного размера и точности:

int, bigint, smallint и tinyint (Transact-SQL)
десятичное и числовое (Transact-SQL)
float и real (Transact-SQL)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...