Листинг 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
Вернуться к статье