25 марта 2012 г.

Free ebook: Introducing Microsoft SQL Server 2012

Introducing Microsoft SQL Server 2012 содержит 10 частей и доступна для свободной загрузки как PDF файл (288 страниц; 10.8 MB).

PART I DATABASE ADMINISTRATION (by Ross Mistry)

1. SQL Server 2012 Editions and Engine Enhancements
2. High-Availability and Disaster-Recovery Enhancements
3. Performance and Scalability
4. Security Enhancements
5. Programmability and Beyond-Relational Enhancements

PART II BUSINESS INTELLIGENCE DEVELOPMENT (by Stacia Misner)

6. Integration Services
7. Data Quality Services
8. Master Data Services
9. Analysis Services and PowerPivot
10. Reporting Services

17 марта 2012 г.

SQL Server 2005/2008 System Views Map

Microsoft SQL Server System Views Map отображает основные системные представления и отношения между ними. Следующие версии доступны в Microsoft Download Center для свободного скачивания как PDF файлы:

12 марта 2012 г.

Применение OUTPUT в инструкциях DML

Анализируя базы данных, я часто вижу, что возможности предложения OUTPUT в инструкциях DML не используются, а реализуются с помощью дополнительных запросов и встроенных функций SQL Server'а. Такая реализация всегда стоит дополнительных ресурсов  и отрицательно влияет на производительность приложения в целом.

OUTPUT предоставляет возможность вывода вставленных/измененных/удаленных данных в инструкциях INSERT, UPDATE, MERGE, DELETE. Строку, обрабатываемую такими инструкциями, можно целиком или частично вставить в табличную переменную (Пример 1), другую таблицу (Пример 2), просто вернуть клиентскому приложению или параллельно выполнить и то, и другое (Пример 3).

Ниже приведены несколько примеров использования предложения OUTPUT в инструкциях INSERT и DELETE.

use tempdb
go

--
-- Тестовая таблица
--
create table t1
(
    id int identity,
    col1 nvarchar(55) null
)
go

--
-- Пример 1: Возвращает идентификатор вставленной строки
--
insert into t1(col1)
output inserted.id
values('testdata 1')
go

--
-- Пример 2: Вставляет данные в таблицу t2
--
create table t2
(
    dml_time datetime not null,
    dml_statement sysname not null,
    id int null,
    col1 nvarchar(55) null
)
go

insert into t1(col1)
output getdate(),'insert',inserted.*
into t2
values('testdata 2')

select * from t2
go

--
-- Пример 3: Вставляет данные в табличную переменную
--
declare @t table(col1 nvarchar(55))

insert into t1(col1)
output inserted.col1 into @t
output inserted.id as NewRowID
values('testdata 3')

select * from @t
go

--
-- Пример 4: Протоколирует удаляемые строки в таблицу t2
--
delete t1
output getdate(),'delete',deleted.*
into t2
where id = 1

select * from t2
go

--
-- Пример 5: Определение последнего значения идентификатора
--
insert into t1(col1)
values('testdata 5')

declare @id int = scope_identity()

select @id as id
go
--
-- Удаляет тестовые таблицы
--
drop table t1, t2
go