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

Откуда: Москва
Сообщений: 2646
SELECT A FROM tab WHERE B =3
SELECT A FROM tab WHERE B =CONVERT(in t, 3)

Научите правильно писать запросы. Как писать, вариант 1 или 2.
Нужно ли избавляться от Compute Scalar (CONVERT_IMPLICIT) ?

(во втором запросе в CONVERT лишний пробел, без этого не отправляется. может из-за firewall)
13 сен 12, 11:50    [13156539]     Ответить | Цитировать Сообщить модератору
 Re: Compute Scalar (CONVERT_IMPLICIT) как правильно писать sql -запросы?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Если у поля B тип данных varchar, то оба варианта плохие
13 сен 12, 11:58    [13156606]     Ответить | Цитировать Сообщить модератору
 Re: Compute Scalar (CONVERT_IMPLICIT) как правильно писать sql -запросы?  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Glory,

А для поля B тип данных int ?
13 сен 12, 12:04    [13156647]     Ответить | Цитировать Сообщить модератору
 Re: Compute Scalar (CONVERT_IMPLICIT) как правильно писать sql -запросы?  [new]
Glory
Member

Откуда:
Сообщений: 104751
select SQL_VARIANT_PROPERTY(3,'BaseType') As BaseType, SQL_VARIANT_PROPERTY(3,'Precision') As Precision, SQL_VARIANT_PROPERTY(3,'Scale') As Scale
13 сен 12, 12:06    [13156673]     Ответить | Цитировать Сообщить модератору
 Re: Compute Scalar (CONVERT_IMPLICIT) как правильно писать sql -запросы?  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Glory,

Если честно, не понял ответа.
13 сен 12, 12:15    [13156751]     Ответить | Цитировать Сообщить модератору
 Re: Compute Scalar (CONVERT_IMPLICIT) как правильно писать sql -запросы?  [new]
Glory
Member

Откуда:
Сообщений: 104751
trew
Glory,

Если честно, не понял ответа.

У каждой константы есть тип данных. Который ей выбирает сервер.
На выбор сервера вы повлиять не можете.
Вы можете только явно конвертировать выбранный сервером тип к нужному вам типу
13 сен 12, 12:17    [13156781]     Ответить | Цитировать Сообщить модератору
 Re: Compute Scalar (CONVERT_IMPLICIT) как правильно писать sql -запросы?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
trew
(во втором запросе в CONVERT лишний пробел, без этого не отправляется. может из-за firewall)
А если писать [int]?
13 сен 12, 12:22    [13156818]     Ответить | Цитировать Сообщить модератору
 Re: Compute Scalar (CONVERT_IMPLICIT) как правильно писать sql -запросы?  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
iap,
Так получается
SELECT A FROM tab WHERE B =3
SELECT A FROM tab WHERE B =CONVERT([int], 3)


Этот вопрос остается актуальным:
Нужно ли избавляться от Compute Scalar (CONVERT_IMPLICIT) в плане запроса?
13 сен 12, 14:04    [13157773]     Ответить | Цитировать Сообщить модератору
 Re: Compute Scalar (CONVERT_IMPLICIT) как правильно писать sql -запросы?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
trew
Нужно ли избавляться от Compute Scalar (CONVERT_IMPLICIT) в плане запроса?
Смотря какой он.
Константы кажись всегда/часто обвёрнуты CONVERT_IMPLICIT.
13 сен 12, 15:22    [13158698]     Ответить | Цитировать Сообщить модератору
 Re: Compute Scalar (CONVERT_IMPLICIT) как правильно писать sql -запросы?  [new]
мимо
Guest
trew
SELECT A FROM tab WHERE B =3
SELECT A FROM tab WHERE B =CONVERT(in t, 3)

Научите правильно писать запросы. Как писать, вариант 1 или 2.
Нужно ли избавляться от Compute Scalar (CONVERT_IMPLICIT) ?

(во втором запросе в CONVERT лишний пробел, без этого не отправляется. может из-за firewall)

Правильно - согласно меню, т.е. типам :
если b варчар, то:
SELECT A FROM tab WHERE B ='3'

, либо
SELECT A FROM tab WHERE B =cast(3 as varchar(100))



если инт,
SELECT A FROM tab WHERE B =3

и т.д.
13 сен 12, 15:38    [13158885]     Ответить | Цитировать Сообщить модератору
 Re: Compute Scalar (CONVERT_IMPLICIT) как правильно писать sql -запросы?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Ну на самом деле не всегда влияет.
К примеру:
WHERE PK = '12345'
WHERE PK =  12345

Всё равно будет SEEK и планы выглядят идентичными:

Scalar Operator(CONVERT_IMPLICIT(bigint,[@1],0))
Scalar Operator(CONVERT_IMPLICIT(bigint,[@1],0))

Просто совершенно тупо писать строку когда там явно число (или наоборот).
Когда нужно вернуть (SELECT) данные то естественно нужно приводить, а вот когда задать условие, то обычно к похожему типу. Но например дату задают строкой, но не всегда:
WHERE Date = '20120913'
WHERE Date = DateAdd(Day,DateDiff(Day,0,GetDate()),0)	-- 0 это начальная дата (1900-01-01)
WHERE Date = DateAdd(Day,DateDiff(Day,'',GetDate()),'')	-- аналогочно

Но CONVERT_IMPLICIT будет всегда. Главное чтоб он был правильный и его не было когда не константы задаёшь (а связку, переменные)
13 сен 12, 16:32    [13159474]     Ответить | Цитировать Сообщить модератору
 Re: Compute Scalar (CONVERT_IMPLICIT) как правильно писать sql -запросы?  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Mnior
Главное чтоб он был правильный и его не было когда не константы задаёшь (а связку, переменные)

CREATE PROC TEST (@ID INT)
AS
SELECT A 
FROM tab 
WHERE 1=1
AND B =3
AND C =@ID

У меня бывают константы в запросах.
Переменная B тип [int]. Нужно ли константу оборачивать так: B =CONVERT([int], 3) ?
14 сен 12, 13:02    [13164164]     Ответить | Цитировать Сообщить модератору
 Re: Compute Scalar (CONVERT_IMPLICIT) как правильно писать sql -запросы?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
trew
B =CONVERT([int], 3) ?
Боже мой, вы поймите смысл.
А если вы воспринимаете только конкретику, то идите в повара.

Как я устал, что не пойми кто мнит себя не то что программистом, а даже кодером.
PS: Числовые константы по умолчанию типа Int (если не сравниваются с иными).
14 сен 12, 15:11    [13165507]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить