КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Системные переменные, функции и хранимые процедурыПример select Object_id ('Сотрудники') -- вывод идентификатора таблицы Dbcc Showcontig (629577281) -- вывод данных о фрагментации таблицы Справочная информация выводится в виде строк: Pages/Extents Scanned ‑ число страниц/экстентов в таблице или индексе. Extents Switches ‑ число переключателей между экстентами. Если это число превышает число всех экстентов, то экстенты фрагментированы. Avg Pages per Extent ‑ среднее число страниц на один экстент. Scan Density [Best Count: Actual Count] ‑ плотность сканирования в процентах. Чем она выше, тем лучше. Дополнительно указывается идеальное и текущее число экстентов. Logical/Extent Scan Fragmentation ‑ степень логической/физической фрагментации данных. При отсутствии фрагментации степень нулевая. Avg. Bytes free per Pages ‑ среднее свободного пространства (в байтах) на странице размером 8 Кбайт. Avg. Page density (full) ‑ процент среднего заполнения страницы. При большом проценте заполнения нужно перестроить данные на странице. 4.3.6.11. Курсоры Курсорыпозволяют создать временный результирующий набор записей (строк) из представления или запроса с возможностью доступа к любой отдельной записи этого набора. Курсоры Transact-SQL бывают четырех типов: 1. Cтатические (Static) ‑ сервер сохраняет результирующий набор системной базы данных tempdb на основе моментального снимка (копий) используемых таблиц. Курсоры открываются только для чтения и изменения, произведенные в базе данных после открытия, не учитываются. 2. Ключевые (Keyset) ‑ результирующий набор ключей состоит из ссылок на записи и создается в системной базе данных tempdb только при открытии курсора и далее не изменяется. Учитываются изменения в базе данных после открытия курсора, а удаления и вставки новых записей ‑ нет. 3. Последовательные (Fast_Forward) ‑результирующий набор не сохраняется на сервере набора данных и запоминается только номер текущей строки. Допускается переход только к следующей строке курсора, которая находится сервером. Все изменения в базе будут учитываться. 4. Динамические (Dynamic) ‑ аналогичны последовательным курсорам, но допускают доступ к любой отдельной строке. Схема работы с курсором: объявление, открытие, выборка данных из курсора командой Fetch в цикле обработки курсора, закрытие и освобождение курсора. Команды работы с курсором (имя курсора может задаваться константой или переменной типа курсора). Declare <имя курсора> Cursor[Local | Global] [Forward_Only | Scroll] [Static | Keyset | Dynamic | Fast_Forward] --типы курсоров [Read_Only | Scroll_Locks | Optimistic] [Type_Warning] For <Select...> For Update [Of <имя столбца>,...] ‑ объявление курсора. Рассмотрим параметры этой команды. Local/Global ‑ локальный/глобальный курсор, удаляемый/сохраняемый после завершения транзакции. Допускаются одноименные локальный и глобальный курсоры. В этом случае в остальных операторах по умолчанию используется локальный, а глобальный уточняется параметром Global.
Forward_Only/Scroll ‑ выборка следующей/любой строки. Read Only ‑ только чтение данных из курсора. Scroll_Locks ‑ блокирует все строки курсора. Update [Of <имя колонки>,...] ‑ допускается корректировка всего курсора или только указанных столбцов. Optimistic ‑ при изменении данных в курсоре, которые уже были изменены вне его, выводится сообщение об ошибке, и операция откатывается. Type_Warning ‑ вывод сообщения при преобразовании типа курсора. Open/Close/Deallocate [Clobal] Cursor <имя курсора> ‑ открытие/закрытие /освобождение курсора. После освобождения курсора открыть его уже невозможно. Закрытие и удаление курсора выполняются автоматически при окончании работы хранимой процедуры. Fetch[ Next | Prior | First | Last | Absolute n | Relative k] [Global] <имя курсора> Into <@X1> [, <@X2>]... ‑ чтение следующей (Next), предыдущей (Prior), первой (First), последней (Last) записи в переменные @X1, @X2... соответственно. Значение N (константа или переменная) задает номер читаемой строки (если N<0, то отсчет ведется от конца набора). Значение K задает число пропуcкаемых записей вперед или назад (К<0) от текущей записи. Признаком окончания строк в запросе является сохранение значений переменных неизменными или значение системной переменной Fetch_Status<>0. Update/Delete <имя таблицы> [Set {<имя столбца>={Default | Null | <выражение>}},...] --для Update Where Current Of <имя курсора> ‑ корректировка/удаление строки таблицы, соответствующей текущей строке курсора. Пример хранимой процедуры c курсором (п. 4.3.7). CREATE PROCEDURE [Подразделения] AS Declare @kp Integer --объявление переменной Declare @np Nvarchar (30) --объявление переменной --объявление курсора с запросом вывода таблицы Подразделения Declare zapros Cursor For Select* from Подразделения For Read Only Open zapros --открытие курсора, запрос выполняется и формируется набор Set Nocount On --блокировка вывода числа обработанных записей While 1>0 --заголовок бесконечного цикла чтения набора Begin --начало блока тела цикла Fetch zapros Into @kp, @np --чтение очередной записи набора If @@Fetch_Status<>0 break --окончание набора и выход из цикла Select @kp, @np --вывод полей записи на экран End --конец тела цикла Close zapros Deallocate zapros --закрытие и удаление курсора 4.3.6.12. Транзакции и блокировки Транзакция - это логическая единица обработки базы данных, переводящая базу данных из одного его целостного состояния в другое. Требования ACID к транзакциям: 1. Атомарность (Atomicity) ‑ будут зафиксированы либо все изменения, выполненные в транзакции, либо восстановлено исходное состояние базы данных на начало выполнения транзакции. 2. Согласованность (Consistency) ‑ контроль правил и ограничений целостности базы данных. При их нарушении производится откат на начало транзакции. 3. Изолированность (Isolation) ‑ изменения, выполняемые одной транзакцией, не должны зависеть от изменений, выполняемых в другой транзакции. 4. Устойчивость (Durability) ‑ физическая фиксация всех необходимых изменений в базе данных при успешном завершении транзакции. Транзакция может состоять из группы операторов SQL, которая начинается с команды Begin Tran[<имя транзакции>] (начать транзакцию) и заканчивается оператором Commit Tran[<имя транзакции>] (завершить транзакцию: зафиксировать в базе все изменения, произведенные после начала транзакции). При аварийном завершении транзакции (например, отключили электропитание) база останется в рабочем состоянии на момент начала транзакции. Если внутри транзакции указать оператор Rollback Tran[<имя транзакции или точки сохранения>], то все изменения отменяются, и база восстанавливается на момент начала транзакции (откат назад) или точки сохранения. Точка сохранения (аналог поименованной транзакции) задается в виде Save Transaction[<имя точки>]. Все транзакции сохраняются в журнале транзакции, который используется для восстановления базы данных из архивной копии. Изоляция транзакций от других пользователей определяется оператором Set Transaction Isolation <метод изоляции>. Существуют следующие методы (уровни) изоляции: Read Commited/ UnCommited (позволяет выполнять/игнорировать блокировку другим пользователям одной и той же сроки или страницы), Repeatable Read (монопольно блокирует строки), Serializable (аналогичен Repeatable Read, но предотвращает чтение уже не существующих записей). Взаимные блокировки различных процессов иногда могут полностью заблокировать работу всей базы данных. Просмотреть информацию о блокировках можно хранимой процедурой sp_lock или Enterpise Manager (выбор идентификатора нужного процесса из группы Current Activity папки Management). Удаление процесса, вызвавшего блокировку, возможно командой Kill Process из контекстного меню для этого процесса или командой Kill <имя процесса>. @@Error- код последней системной ошибки (0 - ошибок нет). @@Cursor_Row - число строк, связанных с курсором после его открытия. @@Rowcount - число строк, на которые повлиял последний запрос. @@Fetch_Status - состояние последнего выполненного оператора Fetch. Avg(x),Sum(x), Min(x),Count(*) - среднее, сумма, минимум, максимум, число значений по столбцам X по всей таблице или по группе строк. Ascii(n), Char(c) ‑ символ с кодом N, код символа C соответственно. Col_Length(s,t) ‑ длина столбца S таблицы T. Coalesce(x1,...) ‑ возвращает первое выражение, отличное от Null. Cast(x As t) ‑ возвращает преобразованное к типу T значение X. Convert(t [(l)],x[,f]) ‑ возвращает преобразованное к типу T (с длиной L) значение X. Параметр F задает формат даты: 4 (дд.мм.гг), 104 (дд.мм.гггг), 8 (чч:мм:cc). Charindex(s1,s2) ‑ возвращает начальную позицию строки S1 в S2. Lower(s)/Upper(s) ‑ преобразование букв строки S в строчные/заглавные. Ltrim/Rtrim/ - строка S без левых/правых пробелов. Rand(n) - случайное число от 0 до N (1). Round(n,t) ‑ округление числа N с точностью до T знаков. Replicate(s,n), Len(s) ‑ строка S повторяется N раз, длина строки S. Reverse(s) ‑ возвращает строку символов из строки S в обратном порядке. Space(n) ‑ возвращает строку из пробелов в количестве N. Str(x[,l[,d]]) - число X преобразуется в строку длиной L и дробной частью длиной D. Stuff(s1,n,l,s2) ‑ строка S2 заменяет подстроку длиной L, начиная с символа под номером N, в строке S1. Substring(s,n,l) ‑ возвращается подстрока строки S длиной L, начиная с символа под номером N (отсчет символов начинается с единицы). Isnull(x,y) ‑ возвращает значение Y, если X=Null. Getdate() ‑ текущая и время. Day(d), Month(d), Year(d) ‑ возвращает номер дня, месяца и года даты D. DataLength(x) ‑ длина выражения X. DateAdd(p,n,d) - увеличение даты D на N периодов типа P: yy (год), q (квартал), m (месяц), d (день), wk (неделя), hh (час), mi (минута), s (секунда), ms (миллисекунда). Datediff(p,d1,d2) - число периодов типа P между датами D1 и D2 (D1<D2). Datename/Datepart(p, d) ‑ часть (P) даты D в виде строки/числа. Object_id(‘имя объекта’) ‑ идентификационный номер объекта базы. Host_name/Hоst_id ()‑ имя/идентификационный номер компьютера‑сервера User - имя текущего пользователя базы данных.
Дата добавления: 2014-12-10; Просмотров: 337; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |