→ SQL Server

Подходы для версионирования баз данных

У нас достаточно молодая сейчас команда, времени особо нет на эксперименты, развитие проекта идет семимильными шагами. Попробовали несколько подходов для хранения/версионирования баз данных. Хотел бы с вами поделиться проблемами, которые мы встречали, а так же нашими решениями. Ну и с удовольствием выслушаю ваши комментарии, предложения, рекомендации.

Публикуем сайт с SQL Server Compact Edition 4.0

Меня, честно, даже обрадовало то, что можно теперь разрабатывать сайты с использованием SQL Server Compact Edition 4.0. Отдельная База Данных иногда бывает провокатором проблем и ошибок: у хостера ваш сосед по БД может сильно перезагрузить сервер БД, и у вас начнется что-то отваливаться (либо хостер может перегрузить сервер БД слишком большим количеством баз данных). С SQL Server Compact Edition 4.0 наш сайт уже не зависит от внешней БД, она у нас локальная, крутится вместе с нашим приложением. Уж очень удобно забирать всегда последнюю версию файла базы данных, легко обновлять – нужно просто скопировать файл. В общем, на момент выхода статьи мой сайт будет крутиться на SQL Server Compact Edition 4.0 уже как месяц (проблем не было никаких). Рекомендую задуматься, если у вас сайт, вроде блога, небольшого онлайн магазина, о том, чтобы перевести (или разрабатывать новое) с использованием SQL Server CE 4.

TSQL: Передача списка/коллекции/множества в хранимую процедуру

Передача множества в хранимую процедуру довольно-таки частая задача. Встречается, например, при фильтрации какой-нибудь коллекции. Так же это может быть импорт данных в базу данных из внешних источников. Я рассмотрю несколько вариантов, которые можно использовать в вашем приложении: склеивание SQL запроса, передача строки списка параметров, разделенных запятой, Bulk Insert, а так же table-valued parameters (самый интересный вариант, пришедший с MS SQL Server 2008).

MS SQL Server: Убираем время из значения типа datetime

Этот текст является в какой то мере переводом топика Kevin Jones - Removing time from SQL datetime, так что если вы хорошо знаете английский, то лучше, наверное, читать руководство из первых рук. Правда, мой вариант дополнен некоторыми тестами.

Итак, мы довольно часто используем SQL сервер для хранения данных с типом дата и время. В SQL Server 2005/2000 существуют два типа данных (специальных типов данных) для хранения даты и времени – это datetime и smalldatetime, разница между ними в возможностях хранения (от и до), точности времени и, соответственно, в количестве используемой памяти. В SQL Server 2008 появились дополнительные типы данных, такие как datetime2, time, date, datetimeoffset, о них вы можете прочитать в статье на MSDN - Типы данных и функции даты и времени (Transact-SQL).

Вернемся же к типу DATETIME. Часто возникает необходимость выбрать из типа DATETIME только дату, а время установить равным 0:00. Не приходиться об этом думать, когда нужно просто вывести результат – тогда все можно сделать форматом вывода, например в C# это может быть “dd.MM.yyyy”. Другое дело, если с данными нужно еще оперировать (например, группировать по дате или что то прибавить или убавить), тогда нам необходим тип DATETIME, в котором нам нужно обнулять время.