Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Неявное приведение типов  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1090
насколько неправославно использовать?
например, передать char(3) значение '0.1' для поля типа decimal?
19 сен 16, 16:24    [19683696]     Ответить | Цитировать Сообщить модератору
 Re: Неявное приведение типов  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
waszkiewicz,

DECLARE @a decimal,
	@b char(3)

SET @b = '0.1'
SET @a = @b
SELECT @a
19 сен 16, 16:31    [19683749]     Ответить | Цитировать Сообщить модератору
 Re: Неявное приведение типов  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1090
TaPaK,
вопрос не в этом. Вопрос в том, стоит ли на клиенте озаботиться типом данных или отдать это дело серверу
19 сен 16, 16:42    [19683808]     Ответить | Цитировать Сообщить модератору
 Re: Неявное приведение типов  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
DECLARE @t TABLE (val DECIMAL) -- DECIMAL(18,0)
INSERT INTO @t VALUES (0.2)

DECLARE @val CHAR(3) = '0.1'
SELECT * FROM @t WHERE val = @val -- [val]=CONVERT_IMPLICIT(decimal(18,0),[@val],0)
GO

DECLARE @t TABLE (val DECIMAL(18,2))
INSERT INTO @t VALUES (0.2)

DECLARE @val CHAR(3) = '0.1'
SELECT * FROM @t WHERE val = @val -- [val]=CONVERT_IMPLICIT(decimal(18,2),[@val],0)
GO

Да стоит. Если этого не делать могут неверно работать Ваши запросы.
19 сен 16, 16:44    [19683821]     Ответить | Цитировать Сообщить модератору
 Re: Неявное приведение типов  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
waszkiewicz
TaPaK,
вопрос не в этом. Вопрос в том, стоит ли на клиенте озаботиться типом данных или отдать это дело серверу

т.е. вы даже не выполнили то что я привёл
19 сен 16, 16:44    [19683824]     Ответить | Цитировать Сообщить модератору
 Re: Неявное приведение типов  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1090
TaPaK,
если вопрос только в decimal и decimal(7,3) к примеру, то я не про это спрашивал
19 сен 16, 16:46    [19683852]     Ответить | Цитировать Сообщить модератору
 Re: Неявное приведение типов  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
waszkiewicz, любое неявное преобразование типов сказывается либо на логике выполнения запроса либо на его производительности. Если есть возможность все делать по фен-шую и указывать правильные типы для параметров то делайте это. Как минимум вместо Index Scan будете Index Seek получать при работе с запросами которые EF генерит.
19 сен 16, 16:52    [19683912]     Ответить | Цитировать Сообщить модератору
 Re: Неявное приведение типов  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
waszkiewicz,

ответ простой - неявное приведение зло в большей или меньшей степени
19 сен 16, 17:10    [19684041]     Ответить | Цитировать Сообщить модератору
 Re: Неявное приведение типов  [new]
архивариус
Member

Откуда:
Сообщений: 164
Conclusion
While implicit conversions occur in SQL Server to allow data evaluations against different data types, they can introduce performance problems for specific data type conversions that result in an index scan occurring during the execution. Good design practices and code reviews can easily prevent implicit conversion issues from ever occurring in your design or workload.
https://www.sqlskills.com/blogs/jonathan/implicit-conversions-that-cause-index-scans/

http://sqlperformance.com/2013/04/t-sql-queries/implicit-conversion-costs

http://www.sqlconsulting.com/news1210.htm


https://msdn.microsoft.com/en-US/library/ms191530(v=sql.110).aspx
The following illustration shows all explicit and implicit data type conversions that are allowed for SQL Server system-supplied data types. These include xml, bigint, and sql_variant. There is no implicit conversion on assignment from the sql_variant data type, but there is implicit conversion to sql_variant.
19 сен 16, 18:03    [19684348]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить