Удаление временных таблиц в MSSQL

Иногда возникает необходимость, в ходе работы процедуры, удалить временно созданную таблицу которая может быть либо создана либо нет, тогда не достаточно просто написать например drop table #myTempTable — потому что в случае если таблицы не существует то запрос не выполнится и выдаст ошибку. Пример ниже показывает как правильно удалять временные таблицы в таком случае:
if exists (
	select * from tempdb.dbo.sysobjects o
	where o.xtype in ('U') 

	and o.id = object_id(N'tempdb..#myTempTable')
)
BEGIN
  DROP TABLE #myTempTable; 
END

Что делать если результат выборки NULL а надо 0.

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

Делается это вот так:
SELECT     (CASE WHEN MAX(ID) IS NULL THEN '0' ELSE MAX(ID) + 1 END) AS Expr1
FROM         MyTable

Теперь, если в выборке будет пусто, то-есть null, то в качестве результата выборки будет передан .

Как задать дату в MSSQL чтобы не зависеть от региональных настроек сервера.

    Собственно привожу здесь пример того как можно сделать так, чтобы скрипт в MSSQL использующий дату отрабатывал правильно при любых региональных настройках и формате даты, я лично — это реализовал вот таким образом:

В скрипте пишем дату вот так:
convert(datetime,'"+data+"',120)

Где data это строка вот такого вида:
ГГГГ.ММ.ДД чч:мм:сс

— Именно на такой формат даты указывает число 120. Поэтому сервер уже не перепутает месяц с днём и т.п.

Для быстрого и безошибочного задания текущей даты можно использовать функцию:
{ fn NOW() }


Вот и всё, если придётся ещё чего нибудь в этом же роде изобретать — допишу.

Курсоры в MSSQL - перебор выборки в цикле.

    Команды манипулирования данными SELECT, UPDATE, DELETE работают сразу с группами строк. Эти группы, вплоть до отдельных строк, можно выбрать с помощью опции WHERE. А если надо перебрать строки некоторой таблицы последовательно, одну за другой? На этот случай в языке SQL существуют курсоры. Курсор (current set of record) – временный набор строк, которые можно перебирать последовательно, с первой до последней.
При работе с курсорами используются следующие команды.
    Объявление курсора:
Читать дальше →

Объединение результатов запросов

На днях столкнулся с такой необходимостью — объеденить результаты выборки по двум запросам.
Чуть было не стал делать это программно, но слегка напряг извилины и выяснилось ничего сложного в том чтобы сделать это одним запросом нет.

Итак имеем 2 таблицы:

[Таблица1]
имеет поля: ID, ID_TAB2, NAME, FAMILY

Читать дальше →