Программирование на SQL 2005 T-SQL - возможные подводные камни, о которых нужно знать - PullRequest
1 голос
/ 12 февраля 2009

Возможно, вам известна проблема Хэллоуин , в которой курсор SQL может стать кошмаром для вас, если его не использовать должным образом.

Какие еще тонкие проблемы (трудные для отладки и обнаружения) могут возникнуть, если не использовать функции SQL 2005?

Ответы [ 4 ]

1 голос
/ 12 февраля 2009

Попытка трактовать SQL как среду программирования, вероятно, самая большая ошибка. SQL это все о том, что вы хотите объявить. Если вы когда-либо используете курсоры или циклические конструкции, спросите себя, есть ли способ преобразовать его в INSERT / UPDATE

1 голос
/ 12 февраля 2009

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

Прочтите здесь о некоторых из ошибок программирования SQL Server

0 голосов
/ 13 февраля 2009

На ум приходит ряд вопросов:

  • Обработка NULL - многим людям трудно понять, что NULL - это совсем другой зверь, чем "0" (ноль), и что вы НЕ МОЖЕТЕ сравнивать IF myCol = NULL - вам нужно использовать "IS NULL" или "IS" NOT NULL "и пр.

NULL имеет свое место - когда это действительно означает отсутствие выбора или значения - но во многих случаях вам, вероятно, лучше определить значение по умолчанию (в столбце INT, часто "0"), которое будет представлять "ничто" "или" выбор не сделан "и т. д.

  • Индексирование - большая путаница вокруг индексации и ее плюсов и минусов, преимуществ и недостатков. Нет смысла индексировать каждый столбец - и даже если вы определили столбец, который будет часто использоваться в предложении SELECT ... WHERE, если селективность столбца не достаточно мала (некоторые эксперты говорят, что одно значение столбец не выделяет 1% или менее ваших данных, не занимайтесь индексацией), часто это не очень помогает, поскольку сканирование полной таблицы (сканирование индекса) обходится дешевле.

А также с индексированием - если вы используете функции T-SQL в своих предложениях WHERE, например «UPPER (myCol) = (value)» или «LEFT (myCol, 10) = (value)», то вы не будете см. также предполагаемую выгоду от индекса.

Индексирование может значительно повысить вашу производительность - но индексируйте с умом!

0 голосов
/ 12 февраля 2009
  1. Выполнение NOT IN для столбца, который может иметь значения NULL, не дает результата.
  2. Выполнение подсчета (cloumn) для столбца, который может иметь нулевые значения, даст только количество ненулевых значений.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...