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, срабатывающие между первым и последним триггерами, выполняются в неопределенном порядке.
[Ещё]
91973e0b-9b05-424d-9a05-5b88a39417e1|5|4.8|27604f05-86ad-47ef-9e05-950bb762570c
Tags:
SQL Server
by Alexey Knyazev
12. мая 2011 01:44
Хотелось бы поговорить о недокументированных процедурах, которые могут быть полезны в повседневной работе, а именно:
sp_MSforeachdb и
sp_MSforeachtable. Эти процедуры появились ещё в SQL Server версии 6.5 и, несмотря на то, что они продолжают присутствовать из версии к версии, их так и не описали в BOL (Books Online).
Эти процедуры позволяют выполнять операции над базами данных (sp_MSforeachdb) и таблицами (sp_MSforeachtable) перебирая их в курсоре. Немного расcкажу о каждой из этих процедур.
[Ещё]
eccefbf8-a6a0-448e-9486-97b29691abfe|5|4.2|27604f05-86ad-47ef-9e05-950bb762570c
Tags: SQL Server
SQL Server
by Alexey Knyazev
20. апреля 2011 12:49
Очень полезный постер с ключевыми счетчиками производительности, их описанием и пороговыми значениями.
SQL_post_29x21_2010_PerfmonFinal.pdf (265,49 kb)
[Ещё]
by Alexey Knyazev
31. марта 2011 03:20
18 марта в городе Екатеринбург состоялась конференция по разработке прикладных приложений для бизнеса. Организаторы: Представительство Microsoft в России.
Конференция была ориентирована, прежде всего, на технических специалистов, разрабатывающих программное обеспечение, а также архитекторов. Открыл мероприятие президент Microsoft в России Николай Прянишников. На примере практических сценариев и демонстраций было рассказано как о решениях, уже доступных на рынке, так и о технологиях будущего.
[Ещё]
39746af0-cf65-4ee4-b6d9-dd76b9320b5c|1|5.0|27604f05-86ad-47ef-9e05-950bb762570c
Tags:
SQL Server
by Alexey Knyazev
19. марта 2011 23:54
Большинство примеров на T-SQL, которые можно найти в сети, как правило, выполняются на тестовых базах данных Northwind и pubs (тестовые БД для SQL Server 2000). Либо на БД Adventure Works - тестовая база данных для SQL Server 2005 и выше.
Скрипты этих баз можно найти по ссылкам:
Northwind и pubs или
Adventure Works.
[Ещё]
6c7e6c60-8568-426a-ab7e-cdf47bd5fa7d|2|5.0|27604f05-86ad-47ef-9e05-950bb762570c
Tags:
SQL Server
by Alexey Knyazev
20. февраля 2011 21:49
Рано или поздно, но у многих возникает вопрос, как определить список дисков, их общий объём и объём свободного пространства на них, при этом используя t-sql. На первый взгляд кажется, что задача должна решаться на раз, два, три. Но не все так просто.
Для решения этой задачи можно использовать несколько сценариев. Во первых хотелось бы вспомнить о недокументированной хранимой процедуре xp_fixedrives. Это очень полезная расширенная хранимая процедура, которая возвращает список всех установленных жестких дисков и размер в МБ свободного пространства для каждого жесткого диска.
[Ещё]
by Alexey Knyazev
18. февраля 2011 00:48
Пользовательские сообщения, как и системные, хранятся в системном представлении sys.messages (master..sysmessages для более ранних версий). Сообщения с идентификаторами, меньшими 50000, являются системными.
Для переноса пользовательских сообщения, написал скрипт, который динамически генерит скрипт для создания этих самых сообщений. Код работает, как для SQL Server 2000, так и выше:
... [Ещё]
by Alexey Knyazev
17. февраля 2011 00:31
Транзакции указывают уровень изоляции, который определяет степень, до которой одна транзакция должна быть изолирована от изменений ресурса или данных, произведенных другими транзакциями. Уровни изоляции описаны с точки зрения того, какие из побочных эффектов параллелизма разрешены (например, «грязные» чтения или фантомные чтения).
Более подробно о всех уровянх изоляции можно прочитать в любой книге по SQL Server и на сайте Майкрософт - http://msdn.microsoft.com/ru-ru/library/ms189122.aspx
А в этой статье хочу поговорить об уровне изоляции READ UNCOMMITTED ( = подсказке NOLOCK ) и несогласованности данных, а так же о чудесах сиквела при уровне изоляции READ COMMITTED (уровень изоляции по умолчанию). [Ещё]
by Alexey Knyazev
26. января 2011 23:55
Восстановления базы из Backup`a или перенос её на другой сервер, "сбраcывает" значение "даты создания" этой базы данных (в таблицах sys.databases, msdb..backupset и т.д.).
Встаёт вопрос: как найти оригинальную дату создания!?
Гарантированный способ - это чтение данных из boot-страниц, а именно страница №9, с помощью команды DBCC PAGE.
[Ещё]
by Alexey Knyazev
26. января 2011 00:42
Существует очень раcпространенный миф, что конструкция insert into ... select ... from ... order by ... гарантирует последовательность вставки данных в таблицу согласно условию order by. Но это заблуждение, т.к. мы не можем гарантировать последовательность физической вставки данных. Сиквел сам (по своему, неведанному нам сценарию) определяет, как данные попадут в таблицу, последовательно или параллельно и какими кусками определяет оптимизатор. При этом кляуза (clause) просто игнорируется.
Но существует очень интересная особенность, когда в таблице, в которую осуществляется вставка, есть поле IDENTITY
[Ещё]