Триггеры и порядок их выполнения

by Alexey Knyazev 1. июня 2011 20:35
До версии SQL Server 7.0, мы могли создать только три триггера на одной таблице, один INSERT, один UPDATE и один DELETE. Ситуация изменилась с выходом SQL Server 7.0. Теперь мы можем на одну таблицу задать большое количество (Ограничено числом объектов в базе данных) триггеров каждого типа.

Порядок запуска триггеров при этом никак не определен и не гарантирован. В SQL Server 2000 появилась документированная процедура sp_settriggerorder, которая позволяет изменять порядок запуска триггеров. Она позволяет указать какие триггеры AFTER, срабатывают первыми или последними. Триггеры AFTER, срабатывающие между первым и последним триггерами, выполняются в неопределенном порядке.

[Ещё]

Tags:

SQL Server

sp_MSforeachview и sp_MSforeachproc

by Alexey Knyazev 12. мая 2011 01:44
Хотелось бы поговорить о недокументированных процедурах, которые могут быть полезны в повседневной работе, а именно: sp_MSforeachdb и sp_MSforeachtable. Эти процедуры появились ещё в SQL Server версии 6.5 и, несмотря на то, что они продолжают присутствовать из версии к версии, их так и не описали в BOL (Books Online).

Эти процедуры позволяют выполнять операции над базами данных (sp_MSforeachdb) и таблицами (sp_MSforeachtable) перебирая их в курсоре. Немного расcкажу о каждой из этих процедур.

[Ещё]

Tags:

SQL Server

SQL Server Perfmon Counters Poster

by Alexey Knyazev 20. апреля 2011 12:49
Очень полезный постер с ключевыми счетчиками производительности, их описанием и пороговыми значениями.


SQL_post_29x21_2010_PerfmonFinal.pdf (265,49 kb)

[Ещё]

Tags: ,

SQL Server

Конференция по разработке прикладных приложений для бизнеса

by Alexey Knyazev 31. марта 2011 03:20


18 марта в городе Екатеринбург состоялась конференция по разработке прикладных приложений для бизнеса. Организаторы: Представительство Microsoft в России.

Конференция была ориентирована, прежде всего, на технических специалистов, разрабатывающих программное обеспечение, а также архитекторов. Открыл мероприятие президент Microsoft в России Николай Прянишников. На примере практических сценариев и демонстраций было рассказано как о решениях, уже доступных на рынке, так и о технологиях будущего.

[Ещё]

Tags:

SQL Server

Тестовые БД Adventure Works, Northwind и pubs

by Alexey Knyazev 19. марта 2011 23:54
Большинство примеров на T-SQL, которые можно найти в сети, как правило, выполняются на тестовых базах данных Northwind и pubs (тестовые БД для SQL Server 2000). Либо на БД Adventure Works - тестовая база данных для SQL Server 2005 и выше.

Скрипты этих баз можно найти по ссылкам: Northwind и pubs или Adventure Works.

[Ещё]

Tags:

SQL Server

Объём дисков на T-SQL

by Alexey Knyazev 20. февраля 2011 21:49

Рано или поздно, но у многих возникает вопрос, как определить список дисков, их общий объём и объём свободного пространства на них, при этом используя t-sql. На первый взгляд кажется, что задача должна решаться на раз, два, три. Но не все так просто.



Для решения этой задачи можно использовать несколько сценариев. Во первых хотелось бы вспомнить о недокументированной хранимой процедуре xp_fixedrives. Это очень полезная расширенная хранимая процедура, которая возвращает список всех установленных жестких дисков и размер в МБ свободного пространства для каждого жесткого диска.

[Ещё]

Tags: , ,

PowerShell | SQL Server

Скрипт для переноса пользовательских сообщений

by Alexey Knyazev 18. февраля 2011 00:48

Пользовательские сообщения, как и системные, хранятся в системном представлении sys.messages (master..sysmessages для более ранних версий). Сообщения с идентификаторами, меньшими 50000, являются системными.
Для переноса пользовательских сообщения, написал скрипт, который динамически генерит скрипт для создания этих самых сообщений. Код работает, как для SQL Server 2000, так и выше:


... [Ещё]

Tags: , , , ,

SQL Server

Уровни изоляции и несогласованность данных

by Alexey Knyazev 17. февраля 2011 00:31

Транзакции указывают уровень изоляции, который определяет степень, до которой одна транзакция должна быть изолирована от изменений ресурса или данных, произведенных другими транзакциями. Уровни изоляции описаны с точки зрения того, какие из побочных эффектов параллелизма разрешены (например, «грязные» чтения или фантомные чтения).
Более подробно о всех уровянх изоляции можно прочитать в любой книге по SQL Server и на сайте Майкрософт - http://msdn.microsoft.com/ru-ru/library/ms189122.aspx


А в этой статье хочу поговорить об уровне изоляции READ UNCOMMITTED ( = подсказке NOLOCK ) и несогласованности данных, а так же о чудесах сиквела при уровне изоляции READ COMMITTED (уровень изоляции по умолчанию). [Ещё]

Tags: , , , ,

SQL Server

Как найти реальную дату создания БД

by Alexey Knyazev 26. января 2011 23:55

Восстановления базы из Backup`a или перенос её на другой сервер, "сбраcывает" значение "даты создания" этой базы данных (в таблицах sys.databases, msdb..backupset и т.д.).

Встаёт вопрос: как найти оригинальную дату создания!?
Гарантированный способ - это чтение данных из boot-страниц, а именно страница №9, с помощью команды DBCC PAGE.


[Ещё]

Tags: ,

SQL Server

INSERT + ORDER BY

by Alexey Knyazev 26. января 2011 00:42

Order by


Существует очень раcпространенный миф, что конструкция insert into ... select ... from ... order by ... гарантирует последовательность вставки данных в таблицу согласно условию order by. Но это заблуждение, т.к. мы не можем гарантировать последовательность физической вставки данных. Сиквел сам (по своему, неведанному нам сценарию) определяет, как данные попадут в таблицу, последовательно или параллельно и какими кусками определяет оптимизатор. При этом кляуза (clause) просто игнорируется.
Но существует очень интересная особенность, когда в таблице, в которую осуществляется вставка, есть поле IDENTITY

[Ещё]

Tags: , , , , ,

SQL Server