Sunderic and Woodhead have written a gem of a book that can earn on place on almost every SQL Server 2000 developer's bookshelf, if not desk. Whether you are an experienced developer new to SQL Server, or an old hand upgrading to 2000, SQL Server 2000 Stored Procedure Programming will introduce you to the features you need to know about. The writing style is clear and easy to read, and the explanations clear, concise and comprehensive.
The book starts with 3 chapters on the basics of SQL Server 2000. While not strictly necessary in a book aimed at developers merely upgrading to SQL Server 2000, it does ensure that the book is accessible to a broad range of developers. I believe any developer with a year or two of experience with SQL can pick up this book and get full value from it. However, even experienced developers should read these chapters; some of SQL Server 2000's new features are first explained here.
Then we progress steadily into more detail of the SQL Server 2000 environment. The role of stored procedures in a scalable, high-volume environment is outlined along with an explanation of the tools available for designing, building and maintaining them. The TSQL language is outlined and the proper roles of batches, scripts and transactions is detailed. Throughout these chapters the new features of SQL Server 2000 are described, and their effect on recommended practices provided. Professional habits of error handling, debugging, and source-code management are described. Through a full and detailed understanding of the parts, we prepare to understand the whole.
The real meat of the book is chapters 9 through 11. Almost a third of the text is here, discussing Stored Procedures, Triggers, and User-Defined Functions; Locking Strategies, Dynamic Queries, Nested Stored Procedures, and Use of Identity Values; COM and Web Interfacing, Job Administration, Email, Database Deployment, and Security; all of these and more are discussed in sufficient detail to provide a good grounding in their capabilities and limitations. Throughout these chapters, as for the entire book, the emphasis remains on professional practices and usages that demonstrate how to write "code for the ages". Code that will scale well; code that is easy to read, diagnose, and repair when problems arise.
The book concludes with an excellent chapter on XML support in SQL Server 2000. It starts with a summary of XML, DFDs and Schemas, and Style Sheets, sufficient to allow a reader new to XML at least follow along with the discussion. Then it goes into details of why and how to receive recordsets from SQL Server 200 in XML, so as to facilitate publication to The Web or an intranet. The ease with which customization, and translation into HTML, can be accomplished is readily apparent from the authors' explanation. Any developers new to XML, who desires to easily publish database content, will find this chapter an invaluable introduction.
A consistent thread through the book is "Professional Development". The examples, with occasional exceptions, are clearly adapted from real programs. The authors not only explain proper techniques for trapping, throwing, and reporting errors; they steadily lead by example. Developers in any scripting language, who think that consistent error checking is tedious or unnecessary, would do well to heed the authors' example.
The book is not without flaws; two handfuls of minor typos could have been caught before printing. The most annoying, however, is Osborne's insistence on setting the code examples in a large typeface, double-spaced. While from their standpoint it bulks up the book a bit, it is most irritating for readers when a code sample stretches over several pages unnecessarily. For the longest examples, it almost makes them unreadable on paper. Fortunately, they are available online for more comfortable study. SMARTEN-UP OSBORNE!
In Chapter 8, "Developing Professional Habits", Sunderic reveals his likely 'project', rather than 'product', orientation. I disagree on his dismissal of "pinning" in Visual Source Safe, because I believe it is a better way to manage configuration in a product-oriented environment. But the issue is peripheral to the book, and probably moot for those readers working in a project-oriented environment.
One particularly nice feature is the use of boldface in the examples to highlight the point being illustrated. In lengthy examples, one can immediately pinpoint the code being discussed, and then expand one's focus to the surrounding code. It significantly improves the readability of the lengthy examples. Good Work.
In conclusion, this book was a most enjoyable read that I expect to keep by my desk for quite some time.