Главная страница  Карта сайта  Печать  Написать письмо  RSS
Войти
Персональный сайт
Стеллецкого Владимира
Обновлено: 20.05.2021 г.

Примеры с SQL

« первая   ‹ предыдущая   1   2   3   4   5   следующая ›   последняя »

Повреждение данных в SQL Server 2012 и 2014 при перестроении индексов в режиме online (17.09.2016) #

Коллега по работе прислал ссылку на интересную, а главное крайне полезную статью.
Кратко: без установленного исправления KB #2969896 в SQL Server 2012 и 2014 при перестроении индексов в режиме online может произойти повреждение индексов и даже потеря данных в таблице.

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

Полезные ссылки (27.03.2016) #

Как работает реляционная БД (26.09.2015) #

Отличная статья (перевод), в которой довольно подробно рассматривается вопрос: Как работает реляционная базы данных?
В очередной раз пополнил свои знания и на всякий случай сохраняю ссылку себе. Основные рассматриваемые моменты:

  • Понятие сложности алгоритмов (O) при работе с базами данных (с примерами)
  • Принципы массива, дерева (индекса) и hash-таблицы
  • Общий обзор базовых компонент базы данных:
    • Диспетчер клиентов
    • Диспетчер запросов (статистика, оптимизатор запросов)
    • Диспетчер данных (транзакции, параллелизм, блокировки)

Текущий пользователь (18.11.2014) #

Иногда на прямо на SQL-сервере бывает необходимо узнать от имени какого пользователя выполняется тот или иной запрос. В этом случае на выручку приходит функция:

print SYSTEM_USER -- Пользователь, под которым подключились к базе данных

Чаще всего я использую данную функцию как временное (отладочное) решение, когда необходимо определить какой пользователь создал или изменил запись в таблице. Для этого достаточно в таблицу добавить поле (NOT NULL) и указать для него в качестве значения по умолчанию SYSTEM_USER.

UPD: Появилось только 2005 MSSQL (было исправлено после уточнения в комментариях)

Комментарии

Denis Wilson (17.11.2014)
В сообщении пару неточностей - этим способом нельзя узнать, какой пользователь изменил запись в таблице, если в запросе UPDATE явно не указано обновление поля значением SYSTEM_USER - инструкция UPDATE изменяет только те поля, которые там указаны, а пользователь останется прежним. Этот метод работает только для INSERT. А сама функция появилась в MS Sql Server 2005.
Спасибо за уточнение.
Для контроля изменения записей использую триггеры, из-за чего получилась некоторая неоднозначность в тексте сообщения.
Версию MS SQL в исходном сообщении исправил.

Ошибка в возвращаемом значении SCOPE_IDENTITY() и @@IDENTITY (18.02.2015) #

We've caught both SCOPE_IDENTITY() and @@IDENTITY returning the incorrect value after doing an insert. It appears to be some combination of our database settings, the number of rows in the tables, and the particulars of the query plan.

https://connect.microsoft.com/SQLServer/feedback/details/328811/scope-identity-sometimes-returns-incorrect-value

То есть в 2008 SQL-сервере SCOPE_IDENTITY() (а также @@IDENTITY) иногда может и "пошутить" - вернуть некорректное значение. Ошибка проявляется при некоторых настройках базы, и определенном кол-ве записей в таблице (>1000000). Вроде как устранено в пакете обновления SP3.

Microsoft SQL-Server 2012 (18.02.2015) #

Импорт данных (05.10.2012) #

Довольно часто возникает ситуация, когда прислали какие-то данные в Excel-файле и их надо загрузить в базу данных (например, MS SQL) для последующей обработки или хранения.

Раньше в таких случаях, я пользовался штатной возможностью SQL-сервера дли импорта данных, но иногда проще и быстрее использовать знание SQL и возможностей самого Excel. Надо просто написать запрос на вставку (обновление и т.д.) одной записи в необходимую таблицу базы данных, а затем с помощью Excel-функции СЦЕПИТЬ (в английской версии CONCATENATE) собрать в последней колонке первой строки Excel-таблицы запрос на вставку (используя подготовленный пример) и содержащий необходимые данные из этой таблицы. Потом достаточно "протянуть" эту формулу до последней строки таблицы, скопировать получившиеся данные в среду выполнения sql-запросов и выполнить получившиеся запросы.

Данный нехитрый способ частенько выручает меня в последнее время.

« первая   ‹ предыдущая   1   2   3   4   5   следующая ›   последняя »

  Вы 51 954 посетитель этой странички
с 07 октября 2006 года
© http://svv-home.ru
О сайте