Я смотрю на некоторый код SQL, который имеет оператор Where как это:
WHERE 'USD' = CCY
Я спросил устройство записи, почему он помещает значение на левой стороне, и он сказал, что это - лучшая практика, чтобы сделать так, происходя от C++, где люди могли по ошибке присвоить значение вместо того, чтобы сравнить равенство путем упущения, что второе равняется знаку.
Я никогда не видел это прежде.
Каковы Ваши мысли?
Э, C ++ не является SQL. В SQL нет ==
и нет присваиваний в предложении WHERE
.
Я не уверен, что это можно назвать «лучшей практикой», но есть соглашение, согласно которому известное значение помещается в правую часть. Итак, с литералом, как в вашем примере, это будет
WHERE CCY = 'USD'
Лучшая практика в C ++ не делает ее лучшей практикой в SQL. Оптимизатору запросов все равно, так что это просто вопрос предпочтений, но я должен сказать, что это не было бы моим предпочтением или тем, как я бы, естественно, это написал.
Если вы посмотрите на это:
'USD' = CCY
по сути то же самое:
CCY = 'USD'
Что касается:
это лучше всего сделать, исходя из из C ++, где люди могли ошибочно присвоить значение вместо сравнения равенства, забывая второе {{ 1}} знак равенства.
Ну, я никогда не видел, чтобы это происходило, и если бы это было так важно, мы бы точно где-то это видели, и это практиковалось бы большинством, если не всеми.
Никогда не видел этого в SQL, где, конечно, рассуждения C ++ неприменимы, поскольку '=' не является оператором присваивания в этом контексте. кроме того, многим программистам на C ++ (включая меня) не нравится этот стиль.
List<SubProduct> subProducts= (List<SubProduct>)Model.subproduct;
Неявное преобразование не выполняется, поскольку List < >
реализует IList
, а не наоборот. Так можно сказать IList < T > foo = new List < T > ()
, но не List < T > foo = (некоторый метод или свойство возврата IList)
.
Er, C++ не является SQL. В SQL нет = =
, а в предложении WHERE
нет назначений.
Я не уверен, что он квалифицируется как "лучшая практика", но есть соглашение, которое ставит известное значение на правой стороне. Таким образом, с литералом, как в вашем примере, который был бы
WHERE CCY = 'USD'
-121--4667646- Я бы лично не сделал это таким образом, но поместил имя столбца в левой части, так как это мне более читаемо/легче следовать в SQL-запросе.
Я очень редко видел, как это делается противоположным образом, и не думаю, что приведенная причина действительно применима к SQL (как было указано, это "=" в SQL, а не "= =")
Если он говорит, что это лучшая практика, я бы попросил его доказать это с исходными кодами SQL, а не C ++. Поскольку 99,9% кода SQL, который я когда-либо читал (включая наш код, код другой организации, файлы справки Microsoft, блоги SQL и т. Д.), Делает противоположное тому, что делает ваш разработчик, я бы сказал, что нарушая нормальные ожидания разработчик, который будет поддерживать код - плохая идея. В SQL мы ожидаем увидеть форму
WHERE CCY = 'USD'
, а не
WHERE 'USD' = CCY
, поэтому специалист также должен писать код таким образом, чтобы гарантировать, что он будет понятен сопровождающему.