powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как объяснить программисту как правильно писать запросы
21 сообщений из 46, страница 2 из 2
Как объяснить программисту как правильно писать запросы
    #39828341
Фотография Focha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я конечно не знаю, где человеческий фактор сыграл роль при передачи информации сюда, но я могу предполагать у вас ошибка в примере.
Код: sql
1.
2.
3.
4.
5.
6.
7.
-- ваш пример
select * from t1
where (f1 = @v1 or @v1 is not null)
and (f2 = @v2 or @v2 is not null)
and (f3 = @v3 or @v3 is not null)
and (f2 = @v4 or @v4 is not null) -- название столбца опять f2
and (f2 = @v5 or @v5 is not null) -- название столбца опять f2


а вы уверены, что это программист?
Сейчас программисты это все подряд, даже грузчик :)
...
Рейтинг: 0 / 0
Как объяснить программисту как правильно писать запросы
    #39828351
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKРечь идёт о том что передано 2 из 5ти переменных и надо вернуть по двум условиям.Или о том, что нужно так же уметь искать по значениям null.
...
Рейтинг: 0 / 0
Как объяснить программисту как правильно писать запросы
    #39828361
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL2008msLex и не оставить шансов оптимизатору использовать индекс
Ну значит изначально делать правильную архитектуру.

С архитектурой тут все нормально, просто главным критерием запроса должна быть не "красивость" (сомнительная, кстати), а скорость работы.



SQL2008Сейчас работаю с базой, где числовые и временнЫе данные забиты в текстовые поля...
Какой прок от оптимизатора в таких случаях?
Смешались в кучу...
Каким боком это относится к исходной проблеме?
Тут нужные данные хранятся в нужном месте и с нужным типом данных
...
Рейтинг: 0 / 0
Как объяснить программисту как правильно писать запросы
    #39828364
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fochaа вы уверены, что это программист?Я думаю, программист, чей код проверяется, не мог так написать, ибо это вылезет при первом же запуске. И неправильные имена колонок, и NOT
ИМХО "не программист" тут явно проверяющий.
...
Рейтинг: 0 / 0
Как объяснить программисту как правильно писать запросы
    #39828373
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex Каким боком это относится к исходной проблеме?
На текстовое поле настроен индекс с сортировкой.
В поле значения
91
908
90

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

Хотя конечно к теме обсуждения это не имеет прямого отношеня.
...
Рейтинг: 0 / 0
Как объяснить программисту как правильно писать запросы
    #39828374
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL2008msLex Каким боком это относится к исходной проблеме?
На текстовое поле настроен индекс с сортировкой.
В поле значения
91
908
90

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

Хотя конечно к теме обсуждения это не имеет прямого отношеня.

какое отношение кривость ваших данных имеет к теме обсуждения?
...
Рейтинг: 0 / 0
Как объяснить программисту как правильно писать запросы
    #39828397
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmTaPaKРечь идёт о том что передано 2 из 5ти переменных и надо вернуть по двум условиям.Или о том, что нужно так же уметь искать по значениям null.
значить мой шар не работает :)
...
Рейтинг: 0 / 0
Как объяснить программисту как правильно писать запросы
    #39828405
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKзначить мой шар не работает :)Или мой :)
...
Рейтинг: 0 / 0
Как объяснить программисту как правильно писать запросы
    #39828597
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL2008
Код: sql
1.
2.
3.
4.
5.
6.
select * from t1
where (f1 = @v1 or @v1 is not null)
and (f2 = @v2 or @v2 is not null)
and (f3 = @v3 or @v3 is not null)
and (f2 = @v4 or @v4 is not null)
and (f2 = @v5 or @v5 is not null)


Чушь какая-то... Вы думаете ваша чушь чем то намного лучше?
...
Рейтинг: 0 / 0
Как объяснить программисту как правильно писать запросы
    #39828678
Фотография Badger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка программиста очень простая и поэтому не сразу видна.
для всех строчек WHERE нужно убрать "NOT" т.е. получится (f1 = @v1 or @v1 is null)
и тогда все работает правильно для любого set ansi_nulls on/off.

Код: sql
1.
2.
3.
4.
5.
6.
select * from t1
where (f1 = @v1 or @v1 is null)
and (f2 = @v2 or @v2 is null)
and (f3 = @v3 or @v3 is null)
and (f2 = @v4 or @v4 is null)
and (f2 = @v5 or @v5 is null)



flexgenПрислали мне сегодня код процедуры на проверку, и вижу я нечто вроде такого (имена переменных, полей и таблицы даны для примера):

Код: sql
1.
2.
3.
4.
5.
6.
select * from t1
where (f1 = @v1 or @v1 is [color=red]not[/color] null)
and (f2 = @v2 or @v2 is not null)
and (f3 = @v3 or @v3 is not null)
and (f2 = @v4 or @v4 is not null)
and (f2 = @v5 or @v5 is not null)



Спрашиваю программиста что именно он имел ввиду написав это, получаю ответ - процедура вызывается с пятью параметрами, любой из них может получить значение NULL. Чтобы не проверять какие именно значения получены и не строить динамический SQL, пишут вот такой вот код. Может я чего-то не понимаю, но, как мне кажется, подобный код правильно работать не будет.
...
Рейтинг: 0 / 0
Как объяснить программисту как правильно писать запросы
    #39828711
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLexSQL2008...
Хотя конечно к теме обсуждения это не имеет прямого отношеня.
какое отношение кривость ваших данных имеет к теме обсуждения?
Дочитать фразу до конца это особенность вашего характера или психики?
...
Рейтинг: 0 / 0
Как объяснить программисту как правильно писать запросы
    #39828713
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MindSQL2008
Код: sql
1.
2.
3.
4.
5.
6.
select * from t1
where (f1 = @v1 or @v1 is not null)
and (f2 = @v2 or @v2 is not null)
and (f3 = @v3 or @v3 is not null)
and (f2 = @v4 or @v4 is not null)
and (f2 = @v5 or @v5 is not null)



Чушь какая-то... Вы думаете ваша чушь чем то намного лучше?
Ненамного. Лишь тем, что моя чушь работает, а эта нет.
...
Рейтинг: 0 / 0
Как объяснить программисту как правильно писать запросы
    #39828735
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BadgerОшибка программиста очень простая и поэтому не сразу видна.
для всех строчек WHERE нужно убрать "NOT" т.е. получится (f1 = @v1 or @v1 is null)
и тогда все работает правильно для любого set ansi_nulls on/off.хмм, а как определяется правильность которая нужна программисту?
не смущает-ли факт того что результат
(в примере: по твоему утверждению - ожидаемо эквивалентных пар a-c и b-d)
при разных @v1 и t1 будет отличаться в зависимости от ansi_nulls?
https://rextester.com/MFJMM69922
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
declare @v1 tinyint=1
declare @t1 table(i tinyint,f1 tinyint)
insert into @t1(i,f1)values(1,null),(2,1)
/*a*/select*,@v1[@v1]from @t1 where f1=@v1 or @v1 is not null
/*b*/select*,@v1[@v1]from @t1 where f1=@v1 or @v1 is null
set @v1=null
set ansi_nulls off
/*c*/select*,@v1[@v1]from @t1 where f1=@v1 or @v1 is not null
/*d*/select*,@v1[@v1]from @t1 where f1=@v1 or @v1 is null
...
Рейтинг: 0 / 0
Как объяснить программисту как правильно писать запросы
    #39828737
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
точнее пары b-d
...
Рейтинг: 0 / 0
Как объяснить программисту как правильно писать запросы
    #39828776
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не, последнее сообщ. явно было лишним, изначально правильно: сравнение результата из пары a-c с парой b-d
...
Рейтинг: 0 / 0
Как объяснить программисту как правильно писать запросы
    #39830211
Фотография Focha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgFochaа вы уверены, что это программист?
ИМХО "не программист" тут явно проверяющий.
Авто темы, он даже больше ничего не отвечал в тему.
...
Рейтинг: 0 / 0
Как объяснить программисту как правильно писать запросы
    #39830245
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fochaalexeyvgпропущено...

ИМХО "не программист" тут явно проверяющий.
Авто темы, он даже больше ничего не отвечал в тему.Угу, некогда, нужно руководить программистами! :-)
...
Рейтинг: 0 / 0
Как объяснить программисту как правильно писать запросы
    #39830265
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Focha,

не надо ничего доказывать, надо писать тесты.
...
Рейтинг: 0 / 0
Как объяснить программисту как правильно писать запросы
    #39830372
-- KAB --
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flexgenПрислали мне сегодня код процедуры на проверку, и вижу я нечто вроде такого (имена переменных, полей и таблицы даны для примера):

Код: sql
1.
2.
3.
4.
5.
6.
select * from t1
where (f1 = @v1 or @v1 is null)
and (f2 = @v2 or @v2 is null)
and (f3 = @v3 or @v3 is null)
and (f2 = @v4 or @v4 is null)
and (f2 = @v5 or @v5 is null)


Соответственно, подобный запрос не вернет ничего несмотря на то, что значение первой переменной not null и это значение есть в таблице. Или я ошибаюсь?
Полагаю опечатка у вас или у программиста, так программист хотел написать )
...
Рейтинг: 0 / 0
Как объяснить программисту как правильно писать запросы
    #39830374
-- KAB --
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flexgen,

А по субж... синтаксически вполне приемлемо этот синтаксис, единственное здесь 100% будет parameter sniffing, для оптимизации или в конец запроса добавлять OPTION(RECOMPILE) или динамический sql все таки делать
...
Рейтинг: 0 / 0
Как объяснить программисту как правильно писать запросы
    #39833025
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-- KAB --flexgen,

А по субж... синтаксически вполне приемлемо этот синтаксис, единственное здесь 100% будет parameter sniffing, для оптимизации или в конец запроса добавлять OPTION(RECOMPILE) или динамический sql все таки делатьПрочитайте лучше что такое parameter sniffing.
...
Рейтинг: 0 / 0
21 сообщений из 46, страница 2 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как объяснить программисту как правильно писать запросы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]