Листинг 1. Создание пользовательского свойства поля.

exec sp_addextendedproperty @name = ?Описание?, @value = ?Это адрес клиента?,
@level0type = ?user?, @level0name = dbo, 
@level1type = ?table?, @level1name = Customers,
@level2type = ?column?, @level2name = Address


Вернуться к статье

Листинг 2. Обновление расширенных свойств.

sp_updateextendedproperty @name = ?Описание?, @value = ?Это действительно адрес
клиента?,  @level0type = ?user?, @level0name = dbo, @level1type = ?table?, 
@level1name = Customers, @level2type = ?column?, @level2name = Address


Вернуться к статье

Листинг 3. Создание пользовательского свойства таблицы

exec sp_addextendedproperty @name = ?Описание?, @value = ?Таблица, содержащая
 список клиентов?, @level0type = ?user?, @level0name = dbo, @level1type = ?table?,
 @level1name = Customers


Вернуться к статье

Листинг 4. Несколько свойств для одного объекта.

exec sp_addextendedproperty @name = ?Описание?, @value = ?Это телефон клиента?, 
@level0type = ?user?, @level0name = dbo, @level1type = ?table?, @level1name = 
Customers, @level2type = ?column?, @level2name = Phone
exec sp_addextendedproperty @name = ?Формат ввода?, @value = ?(999)999-99-99?, 
@level0type = ?user?, @level0name = dbo, @level1type = ?table?, @level1name = Customers, 
@level2type = ?column?, @level2name = Phone


Вернуться к статье

Листинг 5. Удаление расширенного свойства.

exec sp_dropextendedproperty @name = ?Описание?, 
@level0type = ?user?, @level0name = dbo, 
@level1type = ?table?, @level1name = Customers,
@level2type = ?column?, @level2name = Address


Вернуться к статье

Листинг 6. Определение коллации уровня БД.

if exists (select name from master.dbo.sysdatabases where 
name = ?MyDB?) drop database MyDB
go
create database MyDB on (name = ?MyDB_Data?, filename = 
?d:mssqldatasql2000mssql$leshik1dataMyDB_Data.mdf?,
 size = 6, filegrowth = 10%) 
 log on (name = ?MyDB_Log?, filename = 
?d:mssqldatasql2000mssql$leshik1dataMyDB_Log.ldf?,
 size = 2, filegrowth = 10%)
 collate Japanese_CI_AI_KS
Впоследствии ее можно запросить: 
select databasepropertyex(?MyDB?, ?Collation?)
и поменять:
alter database MyDB collate Latin1_General_CI_AI


Вернуться к статье

Листинг 7. Задание коллации для поля.

use MyDB
if exists (select * from information_schema.tables 
 where table_type = ?BASE TABLE? and table_name =
 N?Фрукты?)
 drop table [Фрукты]
create table [Фрукты] (id smallint identity (1, 1) not null
 primary key, [Фрукт1] nvarchar(20) collate
 Cyrillic_General_Bin null, [Фрукт2] nvarchar(20) null)


Вернуться к статье

Листинг 8. Заполнение таблицы.

insert [Фрукты] ([Фрукт1]) values (N?лимон?)
insert [Фрукты] ([Фрукт1]) values (N?lemon?)
insert [Фрукты] ([Фрукт1]) values (N?Манго?)
insert [Фрукты] ([Фрукт1]) values (N?Mango?) 
update [Фрукты] set [Фрукт2] = [Фрукт1]


Вернуться к статье

Листинг 9. Индекс по вычисляемым полям.

select OrderID as ID, CustomerID as Cust, EmployeeID as 
Empl, OrderDate as OrdDate into Ords from Orders
select count(*) from ords where datepart(yyyy, OrdDate) =
 1997

alter table Ords add OrdYear as datepart(yyyy, OrdDate)
create index iOrdYear on Ords(OrdYear)
select count(*) from ords where OrdYear = 1997


Вернуться к статье

Листинг 10. Проверка эффективности запросов.

set showplan_all on
go
select count(*) from ords where datepart(yyyy, OrdDate) =
 1997
select count(*) from ords where OrdYear = 1997
go
set showplan_all off


Вернуться к статье

Листинг 11. Недетерминированное вычисляемое поле.

alter table Ords add Now as GetDate()
select columnproperty(object_id(?ords?), ?Now? ,
 ?IsDeterministic?)


Вернуться к статье

Листинг 12. Неточное выражение.

alter table Ords add x float, y as x * x
select columnproperty(object_id(?ords?), ?y? ,
 ?IsDeterministic?)
select columnproperty(object_id(?ords?), ?y? ,
 ?IsPrecise?)


Вернуться к статье

Листинг 13. Проверка поля.

select columnproperty(object_id(?ords?), ?OrdYear? ,
 ?IsComputed?)
select columnproperty(object_id(?ords?), ?OrdYear? ,
 ?IsIndexable?)


Вернуться к статье

Листинг 14. Корректировка установок масштаба сессии.

if sessionproperty(?ARITHABORT?) = 0 set arithabort on
...
if sessionproperty(?NUMERIC_ROUNDABORT?) = 1 set
 numeric_roundabort off


Вернуться к статье

Листинг 15. Корректировка установок всех сессий.

declare @i as int
set @i = (64 | 4096 | 256 | 32 | 16 | 8) & (16383 ^ 8192)
select @i
exec sp_configure ?user options?, @i


Вернуться к статье

Листинг 16. Создание индексированного представления.

if exists(select * from information_schema.views where
table_name = N?vwПродажиПоКатегориямПродуктов?)
 drop view [vwПродажиПоКатегориямПродуктов]
go
create view vwПродажиПоКатегориямПродуктов with 
schemabinding as
select count_big(*) as Count, c.CategoryName, 
p.ProductName, sum(d.UnitPrice * d.Quantity) as 
ProductSales
from dbo.Categories c inner join dbo.Products p on 
c.CategoryID = p.CategoryID inner join dbo.[Order Details] 
d on p.ProductID = d.ProductID inner join dbo.Orders o on 
o.OrderID = d.OrderID 
group by c.CategoryName, p.ProductName


Вернуться к статье

Листинг 17. Влияние параметра привязки.

begin tran
alter table Products drop column QuantityPerUnit 
alter table Products drop column ProductName
rollback


Вернуться к статье

Листинг 18. Материализация представления.

create unique clustered index ix on vwПродажиПоКатегориям
Продуктов(CategoryName, ProductName)
select * from vwПродажиПоКатегориямПродуктов with 
(noexpand)
begin tran
update Categories set CategoryName = ?Мясо / птица? 
where CategoryName = ?Meat/Poultry?
select * from vwПродажиПоКатегориямПродуктов
rollback tran

create index ixSales on vwПродажиПоКатегориям
Продуктов(ProductSales)


Вернуться к статье

Листинг 19. Эффективность индексного представления.

set showplan_all on
go
select top 1 CategoryName, ProductName, ProductSales 
from vwПродажиПоКатегориямПродуктов with (noexpand, 
index(ixSales)) order by ProductSales desc 
go
set showplan_all off


Вернуться к статье

Листинг 20.

drop index vwПродажиПоКатегориямПродуктов.ix
sp_helpindex ?vwПродажиПоКатегориямПродуктов?

set showplan_all on
go
select top 1 CategoryName, ProductName, ProductSales 
from vwПродажиПоКатегориямПродуктов order by 
ProductSales desc
go
set showplan_all off


Вернуться к статье

Листинг 21. Использование функции OBJECTPROPERTY.

select objectproperty(object_id(?vwПродажиПо
КатегориямПродуктов?), ?IsView?)

select objectproperty(object_id(?vwПродажиПоКатегориям
Продуктов?), ?IsSchemaBound?)

select objectproperty(object_id(?vwПродажиПоКатегориям
Продуктов?), ?IsDeterministic?)
:
select objectproperty(object_id(?vwПродажиПоКатегориям
Продуктов?), ?IsIndexable?)
:
select objectproperty(object_id(?vwПродажиПоКатегориям
Продуктов?), ?IsIndexed?)


Вернуться к статье

Листинг 22. Создание фрагментов данных.

/* Leshik1: */
select CustomerID as CustID, CompanyName as Company, 
ContactName as Contact, ContactTitle as Title, City, 
Country, Address, Phone, Fax into CustAL from Customers 
where CustomerID between ?A? and ?M?
/* Leshik2: */
select CustomerID as CustID, CompanyName as Company, 
ContactName as Contact, ContactTitle as Title, City, 
Country, Address, Phone, Fax into CustMZ from Customers 
where CustomerID between ?M? and ?Z?


Вернуться к статье

Листинг 23. Условие разбиения.

/* Leshik1: */
alter table CustAL add constraint PK_CustAL primary key 
clustered (CustID), constraint CK_CustAL check (CustID < ?M?)
/* Leshik2: */
alter table CustMZ add constraint PK_CustMZ primary key 
clustered (CustID), constraint CK_CustMZ check (CustID >= ?M?)


Вернуться к статье

Листинг 24. Создание прилинкованного сервера и распределенного представления.

/* Leshik1: */
if exists(select * from master.dbo.sysservers where 
srvname = ?Leshik2?)
 exec sp_dropserver @server = ?Leshik2?, 
@droplogins = ?droplogins?
exec sp_addlinkedserver @server=?Leshik2?, 
@srvproduct=??,
 @provider=?SQLOLEDB?, @datasrc=?alexeysh-lptLeshik2?,
 @catalog = ?Northwind?
exec sp_addlinkedsrvlogin @rmtsrvname = ?Leshik2?, 
@useself = ?true?
:
if exists(select * from information_schema.views where 
table_name = ?DistrCust?)
 drop view DistrCust
go
create view DistrCust as select * from 
Northwind.dbo.CustAL union all
 select * from Leshik2.Northwind.dbo.CustMZ


Вернуться к статье

Листинг 25. Обновление данных.

set xact_abort on
update DistrCust set Contact = ?Don Pedro? where CustID = 
?TORTU?
select * from Leshik2.Northwind.dbo.CustMZ


Вернуться к статье

Листинг 26. Первоначальное резервирование данных.

alter database Northwind set recovery full
backup database Northwind to disk = ?d:	empNWind.bak? 
with init
create table MyTbl (id int identity, fld nvarchar(10))
insert MyTbl (fld) values (?aaa?)


Вернуться к статье

Листинг 27. Установка метки.

begin tran bbb with mark
insert MyTbl (fld) values (?bbb?)
commit tran

insert MyTbl (fld) values (?ccc?)

backup log Northwind to disk = ?d:	empNWind.bak?
restore filelistonly from disk = ?d:	empNWind.bak?


Вернуться к статье

Листинг 28. Восстановление до метки.

use master
restore database Northwind from disk = 
?d:	empNWind.bak? with file = 1, norecovery
restore log Northwind from disk = ?d:	empNWind.bak? 
with file = 2, recovery, stopbeforemark = ?bbb?
select * from Northwind..MyTbl


Вернуться к статье

Листинг 29. Восстановление по метку.

restore database Northwind from disk = 
?d:	empNWind.bak? with file = 1, norecovery
restore log Northwind from disk = ?d:	empNWind.bak? 
with file = 2, recovery, stopatmark = ?bbb?
select * from Northwind..MyTbl


Вернуться к статье