|
Программирование >> Программирование баз данных
В качестве примера рассмотрим фрагмент последней части проверочного кода, который использовался в данной главе, и поместим его в хранимую процедуру, чтобы можно было следить за тем, как происходит ее построчное выполнение в отладчике: ALTER PROC spTestTriggerDebugging AS BEGIN -- Этот оператор должен быть выполнен успешно UPDATE Products SET UnitsInStock = UnitsInStock - 1 WHERE ProductID = 6; -- A этот - нет UPDATE Products SET UnitsInStock = UnitsInStock - 12 WHERE ProductID = 26; После этого достаточно перейти к этой хранимой процедуре в окне Server Explorer, щелкнуть на ее обозначении правой кнопкой мыши и выбрать команду Step Into (рис. 13.6). \ Server expjc>-e ▼ x □Р Data CormectionE Q 4 NCRTTHWND.MDF ® Gl Database Diagrams ® £a Tables Ш Views Э a Stored Procedxes Ш О CustOrderHist Ш H CustOrdersOetail 5 CustOrdersOrders Ш Employee Sales bv Country 6 3 sales byver + Г] SalesBvCategofv i ffl 3 sptriartgiia б fiD Ten Most Expensive Pro (Й- Gl Functions ® Й Synonyms a a Types ® £a Assemblies Servers Add New Stored Procedu Open Execute Step Into Stored Procedure 4i Copy Xl Delete propert}e5 Puc. 13.6. Вызов на выполнение команды Step Into Stored Procedure в окне Server Explorer В открывшемся диалоговом окне щелкните на кнопке Execute (ввод каких-либо параметров не требуется). На первом этапе работы с отладчиком будут выполняться начальные операторы хранимой процедуры, но достаточно лишь выполнить команду Step Into для пошагового вьшолнения строк, которые вызывают запуск триггера, как будет получен приятный сюрприз (рис. 13.7), поскольку откроется код триггера! Начиная с этого момента отладка с помощью отладчика может осуществляться обычным образом. Для этого применяются в основном такие же функции, которые были описаны в настоящей книге применительно к хранимым процедурам. Триггер даже становится активной частью стека вызовоа V dbo.ProducmRarioncd: Tri88yrfnwtofi\2a888e2fea6046:C-BB Eile Eit View oject Detwg ImIs Test VVindow £ommjnity tldp - i > View Adject Detwg ImIs Test V cic-?d £:;:Tn...!-,ORVVrg).MDF) ilbo.Prod uctL ORTH WH D.MDF) ON Frcducta FOE lTPCATE I IF ЦРХ>АТЕ tUnitInStOCk)! BEGIN IF EXISTS BiiTStSVNORTHWNP.MDfl (Debuggi>;g) - Microft Vi... JSELECT -Tue-ЕТШ Inserted i JOIN Deleted ti ОЫ i.ProductID = d.ProductID WHERE td.UnitsInStocfc - i.UnitsInStoclcJ > d.tJiiitalnStPcfc: / 2 АШ> d.anitalDStock: - i.UnitalnStQcfc > c( BEGIN RM5ERR0E(Cannot reduce stoclc by more than 50%% at оьсе 1 ,1) ROLLBACK TRAN Debug ifliiliiriliffli itteeb to piQcesa [5040] [SQL] newton <m nvcUn* миПда dbo.IapT s Trigg rDebugging]. The thread >newbon42aeaB££-ea£0-4 tSS) ЮхЭЗО) has exited wil;h ci The t;hread newcoi]V2a83e2f-ea€CI-46 [S£) ЮхЭЗО] haa EKlted Wi-Dll C\ The thiead newconVSaaSSeSf-eefiCI-e tSZJ ГОмЭЗО) haa exited Mith о ton\2aS83tZf-ea&0-W.i::\pqL SBVER 2000 SAMPLE DATABA T-SQI dbo,5fJTe5tTri3gerDebuM<ig{newton5aSe2fa60,C:\5(J. SERVm 2D00 SAMPLE D. T-SQI j djo.PraductlsRati
Puc. 13.7. Отображение кода триггера в отладчике Рекомендуем неизменно использовать описанный метод отладки, когда обнаруживаются столь распространенные ситуации, в которых так сложно происходит отладка кода триггеров. Безусловно, трудности встречаются и при использовании данного метода, но все же такая возможность лучше, чем ничего. Резюме Триггеры представляют собой чрезвычайно мощное инструментальное средство, поэтому позволяют сутдественно расширить функциональные возможности обеспечения целостности данных и в целом добиться более надежной эксплуатации всей системы. Но при использовании триггеров необходимо учитывать некоторые важные соображения. В частности, триггеры могут способствовать значительному повышению производительности системы, если они используются для обработки данньгх должным образом, но при неправильной организации работы вполне могут стать источником значительных затруднений. Отладка кода триггера может оказаться очень трудной задачей (даже после того, как появляется возможность осуществлять отладку с помощью отладчика), но решать эту задачу необходимо, поскольку из-за плохого качества кода триггера происходит снижение быстродействия при выполнении не только самого триггера, но и любого оператора, который вызывает запуск этого триггера. Глава 14 Поддержка инфраструктуры .NET Выбирая в своих будущих книгах место для размещения главы, посвященной описанию инфраструктуры .NET, автор, как правило, испытывает наибольшие трудности. Дело в том, что порядок расположения главы по этой теме относительно других глав должен соответствовать тому, насколько важным оказалось появление возможности применять сборки .NET в программировании для SQL Server со времени вьпсо-да версии SQL Server 2005, и вместе с тем подчеркивать значимость этой темы по отношению к другим различным темам программирования и показывать возможности новых программных средств. Очевидно, что в конечном итоге такой выбор бьш сделан, и он отражает принятое автором решение о том, что вводные сведения об основных элементах .NET должны быть изложены до описания всех остальных элементов программирования, относящихся к СУБД SQL Server. Итак, содержимое настоящей главы является следствР1ем принятого решения. Ко времени выхода версии SQL Server 2000 инфраструктура .NET и все связанные с ней возможности лишь обсуждались в общих чертах. Но слухи о том, что в конечном итоге в СУБД SQL Server будут в полной мере поддерживаться языки, отличные от T-SQL, неоднократно возникали еще до начала 2000 года (т.е. задолго до появления версии SQL Server 2000). Разработчики ожидали этого со все большим нетерпением, особенно узнав о том, что в инфраструктуре .NET будут поддерживаться сложные определяемые пользователем типы данных, а сам T-SQL станет языком .NET с включенными в него средствами обработки ошибок. И вот, наконец, эти пожелания сбьшись, прошли те дни, когда приходилось использовать лишь старый ограниченный язык T-SQL, и перед нами открылся широкий мир, полный привлекательных возможностей. В настоящей главе рассматриваются некоторые из основных элементов, которые появились в версии SQL Server 2005 в результате внедрения инфраструктуры .NET. В частности, будут описаны следующие возможности, основанные на применении средств .NET. Создание основных сборок, в которые входят хранимые процедуры, функции и триггеры на языках, отличных от T-SQL. Определение агрегирующих функций (не реализуемых с помощью определяемых пользователем функций T-SQL).
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |