Microsoft® Azure™ SQL Database Step by Step PDF
Microsoft® Azure™ SQL Database Step by Step PDF
Leonard G. Lobel
Eric D. Boyd
PUBLISHED BY
Microsoft Press
A Division of Microsoft Corporation
One Microsoft Way
Redmond, Washington 98052-6399
Copyright © 2014 by Leonard G. Lobel and Eric D. Boyd
All rights reserved. No part of the contents of this book may be reproduced or transmitted in any form or by any
means without the written permission of the publisher.
Library of Congress Control Number: 2014940679
ISBN: 978-0-7356-7942-9
First Printing
Microsoft Press books are available through booksellers and distributors worldwide. If you need support related
to this book, email Microsoft Press Book Support at mspinput@microsoft.com. Please tell us what you think of
this book at http://aka.ms/tellpress.
The example companies, organizations, products, domain names, email addresses, logos, people, places, and
events depicted herein are fictitious. No association with any real company, organization, product, domain name,
email address, logo, person, place, or event is intended or should be inferred.
This book expresses the author’s views and opinions. The information contained in this book is provided without
any express, statutory, or implied warranties. Neither the authors, Microsoft Corporation, nor its resellers, or
distributors will be held liable for any damages caused or alleged to be caused either directly or indirectly by
this book.
For my loving wife, Shelly, and our wonderful boys, Jaxon and Xander.
—Eric Boyd
This page intentionally left blank
Contents at a glance
Introduction xiii
Index 357
This page intentionally left blank
Contents
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii
microsoft.com/learning/booksurvey
vii
Changing the database edition and maximum size. . . . . . . . . . . . . . 44
Deleting a database. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Using PowerShell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Installing the Microsoft Azure PowerShell cmdlets. . . . . . . . . . . . . . 44
Using the PowerShell Integrated Scripting Environment. . . . . . . . . 46
Configuring PowerShell for your Microsoft account. . . . . . . . . . . . . 46
Creating a new server. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Creating a new database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Deleting a database. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Budgeting for SQL Database. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50
SQL storage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Client bandwidth. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Backup storage space. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Backup storage bandwidth. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52
Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Optimizing your costs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Configuring the database edition and size. . . . . . . . . . . . . . . . . . . . . 55
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
viii Contents
SQL Server Bulk Copy (bcp). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Migrating Schema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Exporting data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Importing data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
SQL Database Migration Wizard. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Downloading the tool. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Migrating a database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .95
ix
Contents
Using Visual Studio Report Server projects. . . . . . . . . . . . . . . . . . . . . . . . . 150
Installing AdventureWorks2012 for SQL Database . . . . . . . . . . . . . 152
Installing SSDT Business Intelligence for Visual Studio 2012. . . . . 154
Creating a report using Visual Studio. . . . . . . . . . . . . . . . . . . . . . . . . 156
Implementing report security. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Shutting down the SSRS virtual machine. . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .171
x Contents
Adding an ADO.NET Web API controller. . . . . . . . . . . . . . . . . . . . . . 230
Testing the Customer Web API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Managing SQL Database connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
Opening late, closing early. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
Pooling connections. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
Recovering from connection faults. . . . . . . . . . . . . . . . . . . . . . . . . . . 234
Adding the Transient Fault Handling Application Block. . . . . . . . . 235
Using the Transient Fault Handling Application Block
with ADO.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Using the Transient Fault Handling Application Block
with Entity Framework. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .239
Reducing network latency. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Keeping services close. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Minimizing round trips. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Effectively using SQL Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
Using the best storage service. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
Optimizing queries. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Scaling up SQL Database. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Partitioning data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
Scaling out with functional partitions . . . . . . . . . . . . . . . . . . . . . . . . 250
Scaling out with shards. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .260
xi
Contents
Chapter 10 Building cloud solutions 289
Creating the SQL Database. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
Extending the SQL Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
Creating a new solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
Creating a SQL Server Database project. . . . . . . . . . . . . . . . . . . . . . 295
Setting the target platform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
Importing from SQL Database into the project. . . . . . . . . . . . . . . . 297
Adding a new column to the Wine table. . . . . . . . . . . . . . . . . . . . . . 300
Deploying the project to Microsoft Azure SQL Database . . . . . . . 301
Creating the Order table. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
Creating stored procedures for the Order table. . . . . . . . . . . . . . . . 307
Creating the data access layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
Introducing the Entity Data Model. . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Creating the Data Access Layer project. . . . . . . . . . . . . . . . . . . . . . . 314
Creating an Entity Data Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
Creating the website. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
Creating an ASP.NET web application project . . . . . . . . . . . . . . . . . 321
Referencing the data access layer. . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
Creating the user interface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
Testing the website locally. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
Deploying the website to Microsoft Azure. . . . . . . . . . . . . . . . . . . . 331
Creating the ASP.NET Web API services. . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
Adding a Web API controller. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
Testing the Web API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
Deploying the Web API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
Creating the Windows Phone application. . . . . . . . . . . . . . . . . . . . . . . . . . 341
Installing the Windows Phone SDK 8.0 . . . . . . . . . . . . . . . . . . . . . . . 341
Creating the Windows Phone Project . . . . . . . . . . . . . . . . . . . . . . . . 343
Adding Json.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
Creating the App’s main page. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
Testing the Windows Phone application. . . . . . . . . . . . . . . . . . . . . . 353
Index 357
microsoft.com/learning/booksurvey
xii Contents
Introduction
M icrosoft Azure SQL Database is the cloud version of Microsoft SQL Server, which
is Microsoft’s well-established on-premises relational database engine platform.
Despite some noteworthy differences, SQL Database (the short name for Microsoft
Azure SQL Database) is largely compatible with SQL Server, so for the most part, any
experience you have working with SQL Server can be directly and immediately applied
to SQL Database. If you are a software professional looking to consider the cloud as a
platform for the database in your next application, SQL Database can be just the right
tool for you. And if you want to get up to speed quickly with this emerging platform,
with or without SQL Server experience, this is just the right book for you.
One big difference between on-premises software and cloud services is that the
latter can be updated and enhanced much more frequently than the former, given that
no installation or customer infrastructure is required in the cloud case. Cloud services
are subject to frequent changes in pricing as well. As such, features, limitations, costs,
the tooling user interface, or even the branding of Microsoft Azure SQL Database, as
described in this book, may have evolved by the time you read it. For example, shortly
before going to press, the platform formerly branded as Windows Azure was changed
to Microsoft Azure. (Although the book title and textual references were updated
accordingly, many screen shots still show the older name, Windows Azure.) Regardless
of the potential for such changes, the principles and techniques covered throughout
this book will help you achieve comfort with and mastery of Microsoft Azure SQL
Database.
xiii
Note As Azure evolves, we evolve with it. Even as this first edition goes to
press, we are busy planning the next edition with expanded coverage of the
recently announced Basic, Standard, and Premium editions. These new ser-
vice tiers (which have limited preview availability at the time of this writing)
can support larger and more scalable databases than the current Web and
Business editions offer. Our next edition will also be revised for the upcoming
release of a new management portal currently being developed by Microsoft.
The book is also useful for those familiar with on-premises SQL Server and are
interested in creating new applications to work with SQL Database, or those who would
like to migrate existing applications that currently work with on-premises SQL Server to
work with SQL Database as well.
Assumptions
No prior knowledge or experience with Microsoft Azure and cloud computing is
assumed or required. Furthermore, although experience with Microsoft SQL Server is
certainly useful, that too is not required.
Several chapters involve .NET programming. Here, too, prior experience with
icrosoft Visual Studio and C# is helpful but not required. The procedures in these
M
chapters include complete code listings, and clear explanations of the code are
provided.
xiv Introduction
This book might not be for you if…
This book might not be for you if you already have extensive knowledge and
experience with SQL Database, and are seeking to delve deeper into internals or other
specialized focus areas not covered in this book. Still, this book contains useful infor-
mation even for experienced users. Therefore, we recommend that you take a quick
glance at the chapter descriptions in the next section. Doing so should help you quickly
determine if there are specific areas of interest we cover that you would like to learn
more about.
■■ Chapter 2—Configuration and pricing With the basics covered, this chapter
explains additional options for configuring SQL Database, beyond the browser-
based portals introduced in Chapter 1. You will learn how to connect to SQL
Database using familiar local tools, such as SQL Server Management Studio
(SSMS) and SQL Server Data Tools (SSDT) inside Visual Studio. You will also learn
how to configure and manage SQL Database using PowerShell, by downloading
the Microsoft Azure PowerShell cmdlets. The chapter concludes with an expla-
nation of how SQL Database pricing is structured on Microsoft Azure, and it
provides tips to help you budget for a SQL Database solution.
xv
Introduction
■■ Chapter 3—Differences between SQL Server and Microsoft Azure SQL
Database Readers with prior SQL Server experience will want to know about
the important differences between the on-premises relational engine they are
familiar with and the SQL Database implementation on Microsoft Azure. This
brief chapter enumerates these differences and explains the rationale behind
them. Where possible, we suggest workarounds for SQL Server features that are
not supported in SQL Database.
■■ Chapter 6—Cloud reporting When you have data in a database, it’s only a
matter of time before you also have reporting requirements related to that data.
And when that database is hosted in the cloud on Microsoft Azure, it’s only
natural to consider using the Azure cloud to host a reporting solution as well. In
this chapter, you will learn how to create an Azure virtual machine (VM) to host
SQL Server Reporting Services (SSRS) in the cloud. (No prior SSRS experience is
needed.) Once the VM is configured, you will learn how to build SSRS reports
using two report authoring tools: Report Builder and SSDT Business Intelligence
for Visual Studio. After building and previewing reports locally, you will learn
how to deploy them to the VM for a complete reporting solution in the cloud.
■■ Chapter 7—Microsoft Azure SQL Data Sync In this chapter, you will learn
how to use the SQL Data Sync service available on Microsoft Azure to replicate
data between multiple databases. You will learn about the hub-and-spoke
architecture upon which the service is based, and see how SQL Data Sync can be
used to implement solutions for a variety of scenarios, including one-way or bi-
directional replication across a set of databases in multiple locations. The proce-
dures in this chapter walk you through the process of configuring the SQL Data
Sync service and creating sync groups that replicate between multiple databases
xvi Introduction
hosted both in the cloud (on Microsoft Azure SQL Database) and on-premises
(using SQL Server). You will also learn how to establish a conflict-resolution strat-
egy and set up an automated synchronization schedule.
■■ Chapter 10—Building cloud solutions In the book’s closing chapter, you will
learn how to build a complete solution in the cloud on top of Microsoft Azure
SQL Database. Specifically, you will create a Visual Studio solution that includes
a SQL Server Database project, an Entity Framework data-access layer, ASP.NET
MVC, and ASP.NET Web API. The solution provides a website, web services, and
a Windows Phone 8 app with functionality for users to retrieve and update data
stored in SQL Database.
■■ Text that you type (apart from code blocks) appears in bold.
xvii
Introduction
■■ A plus sign (+) between two key names means that you must press those keys at
the same time. For example, “Press Alt+Tab” means that you hold down the Alt
key while you press the Tab key.
■■ A vertical bar between two or more menu items (for example, File | Close) means
that you should select the first menu or menu item, then the next, and so on.
System requirements
At a minimum, there are no special system requirements for working with SQL
Database. The Microsoft Azure management portal requires only a web browser and
Internet access. Similarly, the SQL Database management portal requires only a browser
with the Silverlight plug-in.
Some chapters walk you through procedures that use local tools—typically, SQL
Server Management Studio (SSMS) and Visual Studio 2013. To complete these proce-
dures, you will need to have those tools installed as well, which requires the following:
■■ Visual Studio 2013, any edition. (Multiple downloads may be required if using
Express Edition products.)
■■ SQL Server 2012 Express Edition or higher, with SQL Server Management Studio
2012 Express or higher. (Included with Visual Studio, Express Editions require
separate download.)
Chapter 4, "Migrating databases," and Chapter 7, "Microsoft Azure SQL Data Sync,"
include procedures that require a local SQL Server instance on which you have permis-
sions to create a database. If you don’t have access to a local SQL Server instance, you
can install SQL Server Express Edition (the free version of SQL Server) by following the
instructions shown in the next section.
Finally, several individual chapters work with additional software that gets installed
locally. These chapters include detailed procedures for downloading and installing the
necessary software so that you can follow along with the rest of the chapter.
xviii Introduction
Downloads: SQL Server Express Edition
There are several SQL Server Express Edition downloads available on the Microsoft site,
and they are available in both 32-bit and 64-bit versions. You can choose to install just
the SQL Server Express database engine (and nothing else), or you can choose one of
two other (larger) downloads: Express With Tools (which includes SQL Server Manage-
ment Studio [SSMS]) or Express With Advanced Services (which includes SSMS, Full
Text Search, and Reporting Services). There are also separate downloads for SSMS and
LocalDB, but these do not include the SQL Server Express database engine needed to
host local databases.
To install the SQL Server Express Edition database engine, follow these steps:
3. Select the appropriate download for your system, as shown in Figure I-1:
xix
Introduction
FIGURE I-1 Downloading SQL Server 2012 Express Edition (64-bit version)
4. Click Next.
5. If you receive a pop-up warning, click Allow Once, as shown in Figure I-2.
6. When prompted to run or save the file, choose Run. This starts and runs the
download.
7. If the User Account Control dialog appears after the download files are
extracted, click Yes.
8. In the SQL Server Installation Center, click New SQL Server Stand-Alone
Installation, as shown in Figure I-3.
xx Introduction
FIGURE I-3 Choosing a new SQL Server installation
a. On the License Terms page, select I Accept The License Terms and click
Next.
b. On the Product Updates page, allow the wizard to scan for updates, and
then click Next.
c. On the Install Setup Files page, wait for the installation to proceed.
e. Continue clicking Next through all the remaining pages until the
Installation Progress page, and wait for the installation to proceed.
xxi
Introduction
FIGURE I-4 SQL Server Express installation in progress
http://aka.ms/AzureSQLDB_SBS
xxii Introduction
found in each of the chapters. Finally, the code folders for Chapters 6, 8, and 10 also
include the completed Visual Studio solutions for the exercises found in those chapters.
Acknowledgments
I was first asked to write a book on SQL Azure—back when it was still called SQL
Azure—nearly two years ago. It’s been a long road since then, and despite seismic
shifts both in the Azure product platform and in the book publishing ecosystem (not to
mention an unexpected curve ball or two), I am extremely delighted to finally publish!
This is my third technical book, and although each experience has been unique, I’ve
learned the same lesson in each case: I could not have even contemplated the challenge
without the aid of numerous other talented and caring individuals. These are folks who
deserve special recognition—people who lent their generous support out in so many
different ways that it’s impossible to mention names in any prescribed order.
So I’ll start with Andrew Brust. If not for Andrew (who himself is a well-established
leader in the software industry), I would never have started down the book-writing
path in the first place. I am grateful for our personal friendship, as well as our working
relationship writing books and presenting workshops together. These experiences truly
help me thrive and grow.
I’m also fortunate to have teamed up with my colleague and co-author Eric Boyd,
who produced four excellent chapters on several advanced topics. Eric is an extremely
talented software professional, whose expertise and passion for technology comes
through clearly in his writing.
Russell Jones, my pal at O’Reilly Media, gets special mention of course, because he’s
the one who asked me to write this book in the first place. I thank Russell, not only for
offering me the opportunity, but for his expert guidance and assistance during the
transition to Microsoft Press. More thanks go out to Roger LeBlanc for his copyediting
review, and to Scott Klein for his technical review. Special thanks as well to Devon
Musgrave and Rosemary Caperton at Microsoft Press, and Steve Sagman of Waypoint
Press. Their guidance has been vital to the successful production of this book, and it has
been an absolute pleasure working with each one of them.
I would like to give special mention to the Microsoft MVP program, which was an
indispensable resource during the writing of this book. So thank you Microsoft, and to
my MVP lead Simon Tien as well, for his constant encouragement.
xxiii
Introduction
This book could not have been written, of course, without the love and support of
my family. I owe an enormous debt of gratitude to my wonderful partner Mark, and our
awesome kids Adam, Jacqueline, Josh, and Sonny, for being so patient and tolerant with
me throughout this project.
And greatest thanks of all go out to my dear Mom, bless her soul, for always
encouraging me to write with “expression.”
—Leonard Lobel
I have been developing software professionally for almost 20 years and I am grateful for
being blessed with deep interest and excitement for this industry, the ability learn and
understand what are sometimes very complex concepts, and the support of my family,
friends, mentors and peers throughout my career. Writing a book like this requires lots
of guidance and help from many people, and I have many people to thank.
First and foremost, I want to thank God for everything: for life, salvation, family,
friends, talents, abilities and everything.
Working on this project over the past year has been a lot of fun, but it has also been
a lot of work. My family has been extremely supportive, even when I had to block off
nights and weekends to write. I owe so much to my wife, Shelly, for everything that she
does for our family. And I’m so thankful for our two wonderful boys who enjoy sitting
next to me in my office and cuddling up next to me with my laptop in the living room,
when my evenings and weekends get occupied with writing.
In addition to family, I want to thank friends and co-workers who have also been
very supportive during this project, even when I bring my laptop to their living rooms,
kitchens and dining rooms so that I can write a few more words, paragraphs and pages.
I want to thank Lenni Lobel who invited me to join him on this project. Lenni has
been a fantastic co-author and has done a great job leading this project and driving it
to completion. His guidance, editing and feedback has been extremely valuable for me
personally and for the project. I’m also very appreciative of his patience throughout this
project.
Last, but certainly not least, thank you to everyone at Microsoft and Microsoft Press
who have helped with this project both directly and indirectly, this list includes Scott
Klein, Dora Chan, Mark Brown, Devon Musgrave, Rosemary Caperton, Steve Sagman,
Conor Cunningham, the Azure CAT team, and so many more.
—Eric Boyd
xxiv Introduction
Errata, updates, & book support
We’ve made every effort to ensure the accuracy of this book and its companion
content. You can access updates to this book—in the form of a list of submitted errata
and their related corrections—at:
http://aka.ms/AzureSQLDB_SBS
If you discover an error that is not already listed, please submit it to us at the same
page.
Please note that product support for Microsoft software and hardware is not
offered through the previous addresses. For help with Microsoft software or hardware,
go to http://support.microsoft.com.
http://aka.ms/tellpress
We know you’re busy, so we’ve kept it short with just a few questions. Your answers
go directly to the editors at Microsoft Press. (No personal information will be request-
ed.) Thanks in advance for your input!
Stay in touch
Let’s keep the conversation going! We’re on Twitter: http://twitter.com/MicrosoftPress
xxv
Introduction
This page intentionally left blank
CHAPTER 3
O ne of the most attractive aspects of Microsoft Azure SQL Database is that it shares virtually the
same codebase and exposes the same tabular data stream (TDS) as on-premises Microsoft SQL
Server. Thus, to a great extent, the same tools and applications that work with SQL Server work just
the same and just as well with SQL Database. Notice that we said to a great extent, because despite
their commonality, there are quite a few SQL Server features that SQL Database does not support.
In this brief chapter, we discuss how and why these two platforms differ from one another, and we
explain the SQL Database constraints you need to be aware of if you have previous experience with
SQL Server.
SQL Server and SQL Database differ in several ways—most notably, in terms of size limitations,
f eature support, and T-SQL compatibility. In many cases, these constraints are simply the price you
pay for enjoying a hassle-free, self-managing, self-healing, always-available database in the cloud.
That is, Microsoft cannot responsibly support features that impair its ability to quickly replicate, relo-
cate, and scale a SQL Database instance. This is why SQL Database places limits on database size and
doesn’t support certain specialized features, such as FILESTREAM.
Another common reason why a particular feature or T-SQL syntax might not be supported in
SQL Database is that it’s simply not applicable. With SQL Database, administrative responsibilities
are split between Microsoft and you. Microsoft handles all the physical administration (such as disk
drives and servers), while you manage only the logical administration (such as database design and
security). This is why any and all T-SQL syntax that relates to physical resources (such as path names)
are not supported in SQL Database. For example, you don’t control the location for primary and log
file groups. This is why you can’t include an ON PRIMARY clause with a CREATE DATABASE statement,
and indeed, why SQL Database does not permit a file group reference in any T-SQL statement. Plainly
stated, everything pertaining to physical resources (that is, infrastructure) is abstracted away from you
with SQL Database
Yet still, in some cases, a certain SQL Server feature or behavior might be unsupported merely
because Microsoft has just not gotten around to properly testing and porting it to SQL Database.
Azure is constantly evolving, so you need to keep watch for updates and announcements. This small
57
chapter is a great starting point, but the best way to stay current is by reviewing the “Guidelines and
Limitations” section of the SQL Database documentation on the MSDN website. (See http://msdn.
microsoft.com/en-us/library/ff394102.aspx.)
Size limitations
With the exception of the free, lightweight Express edition of SQL Server, there is no practical upper
limit on database size in any edition of SQL Server. A SQL Server database can grow as large as
524,272 terabytes. (For SQL Server Express edition, the limit is 10 gigabytes.)
In contrast, SQL Database has very particular size limitations. As explained in Chapter 2,
“Configuration and pricing,” you can set the maximum size by choosing between the Web and
Business editions. With a Web edition database, you can set the maximum database size to either 1
or 5 gigabytes (GB). With a Business edition database, the maximum database size can range from 10
to 150 GB. The absolute largest supported database size is 150 GB, although partitioning strategies
can be leveraged for scenarios that require databases larger than 150 GB (as explained in Chapter 8,
“Designing and tuning for scalability and high performance”).
Note At the time this book went to press, Microsoft announced the Preview availability of
SQL Database Premium. This is a more costly option than the standard Web and Business
editions of SQL Database (which have been rebranded as Basic and Standard), and it
supports a maximum database size of 500 GB. As we explain in Chapter 8, SQL Database
Premium also lets you scale up for performance using dedicated CPU and memory.
Connection limitations
SQL Database is far less flexible than SQL Server when it comes to establishing and maintaining
connections. Keep the following in mind when you connect to SQL Database:
■■ SQL Server supports a variety of client protocols, such as TCP/IP, Shared Memory, and Named
Pipes. Conversely, SQL Database allows connections only over TCP/IP.
■■ SQL Database does not support Windows authentication. Every connection string sent to SQL
Database must always include a login user name and password.
■■ SQL Database often requires that @<server> is appended to the login user name in
connection strings. SQL Server has no such requirement.
■■ SQL Database communicates only through port 1433, and it does not support static or
dynamic port allocation like SQL Server does.
■■ SQL Database does fully support Multiple Active Result Sets (MARS), which allows multiple
pending requests on a single connection.
• The latest version of the Entity Framework (EF6, Microsoft’s recommended data access API
for .NET) has a new Connection Resiliency feature, which automatically handles the retry
logic for dropped connections.
• The Microsoft Enterprise Library Transient Fault Handling Application Block, covered
in Chapter 4, lets you define and implement retry strategies to deal with dropped
connections.
• The ADO.NET SqlConnection class has an OpenWithRetry extension method that handles
the retry logic based on the default retry policy (which must be defined using the Microsoft
Enterprise Library Transient Fault Handling Application Block).
Unsupported features
This section lists many SQL Server capabilities that are not supported in SQL Database, and here we
suggest workarounds where possible. Again, because this content is subject to change, we recom-
mend you check the MSDN website for the latest information. (See http://msdn.microsoft.com/en-us/
library/ff394102.aspx.)
■■ Agent Service You cannot use the SQL Server Agent service to schedule and run jobs on
SQL Database.
■■ Audit The SQL Server auditing feature records server and database events to either the
Windows event log or the file system, and it is not supported in SQL Database.
■■ Backup/Restore Conventional backups with the BACKUP and RESTORE commands are
not supported with SQL Database. However, SQL Database supports an automated backup
schedule that creates transactionally consistent backups in the form of BACPAC files created
in Azure storage. You can also create BACPAC files manually; however, this does not provide
transactional consistency for changes made during the export operation. To ensure transac-
tional consistency for a manual backup, you can either set the database as read-only before
exporting it to a BACPAC, use the Database Copy feature to create a copy of the database with
transactional consistency and then export that copy to a BACPAC file. See Chapter 5, “Security
and backup,” for more information.
■■ Browser Service SQL Database listens only on port 1433. Therefore, the SQL Server Browser
Service, which listens on various other ports, is unsupported.
■■ Change Data Capture (CDC) This SQL Server feature monitors changes to a database,
and it captures all activity related to change tables. CDC relies on a SQL Server Agent job to
function and is unsupported in SQL Database.
CHAPTER 3 Differences between SQL Server and Microsoft Azure SQL Database 59
■■ Common Language Runtime (CLR) The SQL Server CLR features (often referred to sim-
ply as SQL CLR) allow you to write stored procedures, triggers, functions, and user-defined
types in any .NET language (such as Microsoft C# or Visual Basic) as an alternative to using
traditional T-SQL. In SQL Database, only T-SQL can be used; SQL CLR is not supported. Note,
however, that this limitation does not apply to SQL Server data types implemented inter-
nally using the CLR (such as xml, geography, and geometry, all of which are supported in SQL
Database).
■■ Compression SQL Database does not support the data-compression features found in SQL
Server, which you use to compress tables and indexes.
■■ Database object naming convention In SQL Server, multipart names can be used to
reference a database object in another schema (with the two-part name syntax schema.object),
in another database (with the three-part name syntax database.schema.object), and (if you
configure a linked server) on another server (with the four-part name syntax server.database.
schema.object). In SQL Database, two-part names can also be used to reference objects in
different schemas. However, three-part names are limited to reference only temporary objects
in tempdb (that is, where the database name is tempdb and the object name starts with a #
symbol); you cannot access other databases on the server. And you cannot reference other
servers at all, so four-part names can never be used.
■■ Extended events In SQL Server, you can create extended event sessions that help to
troubleshoot a variety of problems, such as excessive CPU usage, memory pressure, and
deadlocks. This feature is not supported in SQL Database.
■■ Extended stored procedures You cannot execute your own extended stored procedures
(which are typically custom-coded procedures written in C or C++) with SQL Database. Only
conventional T-SQL stored procedures are supported.
■■ File streaming SQL Server native file-streaming features, including FILESTREAM and
FileTable, are not supported in SQL Database. Instead, you can consider using Azure Blob
Storage containers for unstructured data files, but it will be your job at the application level to
establish and maintain references between SQL Database and the files in blob storage, though
note that there will be no transactional integrity between them using this approach.
■■ Full-Text Searching (FTS) The FTS service in SQL Server that enables proximity searching
and querying of unstructured documents is not supported in SQL Database. However, there
is a third-party text search engine library available from Lucene that does work with SQL
Database. For more information, visit http://www.lucene.net.
■■ Mirroring SQL Database does not support database mirroring, which is generally a non-
issue because Microsoft is ensuring data redundancy with SQL Database, so you don’t need
to worry about disaster recovery. This does also mean that you cannot use SQL Database as a
location for mirroring a principal SQL Server database running on-premises. However, if you
want to consider the cloud for this purpose, you can host SQL Server inside an Azure virtual
machine (VM) against which you can mirror an on-premises principal database. This solu-
tion requires that you also implement a virtual private network (VPN) connection between
■■ Partitioning With SQL Server, you can partition tables and indexes horizontally (by groups
of rows) across multiple file groups within a database, which greatly improves the performance
of very large databases. SQL Database has a maximum database size of 150 GB (or 500 GB, for
the newly announced Premium edition) and gives you no control over file groups, thus it does
not support table and index partitioning.
■■ Replication SQL Server offers robust replication features for distributing and synchronizing
data, including merge replication, snapshot replication, and transactional replication. None
of these features are supported by SQL Database; however, SQL Data Sync can be used to
effectively implement merge replication between a SQL Database and any number of other
SQL Databases on Microsoft Azure and on-premises SQL Server databases. See Chapter 7,
“Microsoft Azure SQL Data Sync,” for more information.
■■ Resource Governor The Resource Governor feature in SQL Server lets you manage
workloads and resources by specifying limits on the amount of CPU and memory that can be
used to satisfy client requests. These are hardware concepts that do not apply to SQL Data-
base, so the Resource Governor is unsupported.
■■ Service Broker SQL Server Service Broker provides messaging and queuing features, and it
is not supported in SQL Database.
■■ System stored procedures SQL Database supports only a few of the system stored
procedures provided by SQL Server. The unsupported ones are typically related to SQL Server
features and behaviors not supported by SQL Database. At the same time, SQL Database
provides a few new system stored procedures not found in SQL Server that are specific to SQL
Database (for example, sp_set_firewall_rule).
■■ Tables without a clustered index Every table in a SQL Database must define a clustered
index. By default, SQL Database will create a clustered index over the table’s primary key col-
umn, but it won’t do so if you don’t define a primary key. Interestingly enough, SQL Database
will actually let you create a table with no clustered index, but it will not allow any rows to be
inserted until and unless a clustered index is defined for the table. This limitation does not
exist in SQL Server.
■■ Transparent Data Encryption (TDE) You cannot use TDE to encrypt a SQL Database like
you can with SQL Server.
■■ USE In SQL Database, the USE statement can refer only to the current database; it cannot be
used to switch between databases as it can with SQL Server. Each SQL Database connection is
tied to a single database, so to change databases, you must connect directly to the database.
■■ XSD and XML indexing SQL Database fully supports the xml data type, as well as most
of the rich XML support that SQL Server provides, including XML Query (XQuery), XML Path
(XPath), and the FOR XML clause. However, XML schema definitions (XSD) and XML indexes
are not supported in SQL Database.
CHAPTER 3 Differences between SQL Server and Microsoft Azure SQL Database 61
Summary
In this brief chapter, you learned about the important differences between on-premises SQL Server
and SQL Database on Microsoft Azure. We explained the SQL Database limitations on size, as com-
pared to a virtually unlimited database size supported by SQL Server. We also discussed connection
limitations, and important considerations to keep in mind with respect to dropped connections, which
occur with relative frequency in SQL Database. The chapter concluded by enumerating the many SQL
Server features that are either unsupported or have limited support in SQL Database, and offered
workarounds where possible.
The information in this chapter will help you decide whether or not SQL Database is suitable for
your particular scenario. Of course, if you determine that it is not, always remember that you can run
on-premises SQL Server in an Azure VM (we show you how in Chapter 6). This IaaS approach provides
you with full SQL Server functionality in the cloud, compared to the PaaS approach of going with
SQL Database.
357
BACPAC files
358
databases
359
databases
360
IP addresses
G allowed, 12, 35
current client IP address, 104
Generate And Publish Scripts wizard, 68–69 firewall rules for, 101–104
geographic region, 8–9 learning remote addresses, 37
361
JavaScript Object Notation (JSON)
362
ORM (object relational mapping)
363
PaaS (Platform as a Service)
P data transfer, 51
file storage, 54
PaaS (Platform as a Service), 4, 218 geographic location and bandwidth pricing, 51
partitioning data, 58, 61, 250–259 online pricing calculator, 50
page and row-count information, 276 pricing structures, 7
sharding, 13, 251–259 storage, 50–51
password policy, 107 storage space, 51–52
passwords in connection strings, 316 support plans, 53–54
performance primary keys, 67
in the cloud, 218 primary transactional database, replicating, 178–179
of cloud reporting, 124 privacy, 98–99
of data access, 217 public cloud platforms See Microsoft Azure
database connections overhead, 234 public cloud vendors
latency, reducing, 243–244 auditing services, 99
optimizing and tuning, 217, 244–245 compliance certifications, 99
of queries, 245, 271–275 hackers, protecting against, 99
permissions, 108–111, 170 malicious attack prevention, 98
physical administration, 57 multitenancy management, 98
physical data centers, 98, 99 security responsibilities, 98–99
physical storage with PaaS, 4 publish process, 301–303, 312
Plain Old CLR Object (POCO) classes, 223–224, 230 .publishsettings file, 47
Platform as a Service (PaaS), 4, 218 PUT requests, 352
port 80, 130–132
port 1433, 58
port allocation, 58 Q
POST requests, 326, 352
PowerShell, 44–50 queries, 24–26
administrator credentials, 48 editing, 273
-Collation switch, 49 encapsulating, 27, 243–244
configuring for Microsoft account, 46–47 error code 40544, 276
context associated with server and credentials, 48 execution plans, 273–275
database collation, changing, 49 fan-out, 256, 259
database edition, changing, 49 memory grants, 278
database size, changing, 49 optimizing, 245
databases, creating, 48–49 performance, 271–275
databases, deleting, 50 query plan details, 272–273
databases, viewing, 49 query plans, cached, 278
-Edition switch, 49 query plans, showing, 278
firewall rules, creating, 48 running, 193–194
-Force switch, 50 in stored procedures, 141, 243–244
management, automating, 281 query code, 140–141, 157
master databases, 49 query filters, 25–26
-MaxSizeGb switch, 49 Queue storage, 244–245
server access, 47–48 Quick Create database creation option, 31–33
servers, creating, 47–48 quick-start links, 36, 38–39
PowerShell Integrated Scripting Environment (ISE), 46
PowerShell Microsoft Azure cmdlets, 44–45, 48, 49
Premium edition of SQL Database, 58, 245–250 R
preview release software, 120–121, 174, 246 RDL authoring tools, 125
pricing for Microsoft Azure .rdl files, 169
bandwidth, 9, 51–53, 79 .rdp files, 128
Blob Storage, 54 read-only permissions, 108–111
364
schemas
records, aging policies, 56 Reporting Services See SQL Server Reporting Services
Red-Gate Data Compare, 63 (SSRS)
Red-Gate SQL Compare, 63 reports
redundancy, data, 60–61 bar charts, 164–166
reference databases, 174, 184, 186–187 creating with Report Builder, 137–150
referential integrity of data, 19 creating with Visual Studio, 156–162
regulatory requirements, complying with, 99 data source, 125, 135, 138–140, 158–159
relational data, storage in SQL Database, 244–245 dataset, 125, 135, 138, 140–143
relational databases, 250 date and time of execution, 138
See also databases; SQL Database deploying to SSRS, 135, 147–149, 166–168
reliability, 217, 234–244 drill-down capabilities, 163
Remote Desktop sessions, 128 executing, 146
remote IP addresses, enabling database access, 37–38 formatting, 162–163
replication, 61 layout, 125, 135, 143–145
Report Builder, 123, 125 matrixes in, 157, 160
browser, running report from, 149–150, 168–169 previewing, 145–147, 163
data sources for reports, 138–140 queries, defining, 159–160
datasets for reports, 138, 140–143 RDL format, 125
date and time of report execution, 138 running from browser, 149–150, 168–169
Getting Started dialog, 137 running locally, 145–146
images, adding to reports, 139 saving, 145
installing, 135–137 security, 170
launching, 137 summarizing data in, 157
layout of report, 143–145 title, 143
matrix control, 138–139 user role assignment, 170
previewing reports, 135, 145–147 repository pattern, 314
Report Data pane, 138–139 requests. See HTTP requests and responses
report parameters, defining, 139 monitoring with DMVs and DMFs, 277–280
reports, creating, 137–150 Resource Governor, 61
reports, saving and running locally, 145–147 REST services, 336
Row Groups and Column Groups panes, 139 RESTful Web APIs, 218–228
SSRS, deploying reports to, 147–149 restore database operations, 117–119
table control, 138–139 RetryPolicy class ExecuteAction method, 239–243
user interface, 138 round trips, minimizing, 243–244
Report Definition Language (RDL), 123 routing, 179
Report Designer, formatting data, 162–163 in MVC applications, 321
Report Manager, 130, 149, 170
report server, 124, 130–132
Report Server Database Configuration Wizard, 129–130 S
Report Server Project Wizard, 158–162
SaaS (Software as a Service), 4, 289
Report Server projects, 150–169
scalability, 2–4, 218, 245–250
reporting, 123–171
functional partitions, 250–251
Report Builder, 135–150
OLTP activity, separating from reporting activity, 184
requests, performance impact of, 179
partitioning for, 58
sample database, creating, 132–135
sharding, 251–259
security of reports, 170
synchronizing between multiple locations, 178–179
service URL, 149
SCC (source code control), 294–295
virtual directory, creating, 129
schemas, 156, 313
Visual Studio Report Server projects, 150–169
changing before migration, 80
VM, creating, 125–132
compare operations, 301–303
VM, shutting down, 171
deploying to SQL Database, 91, 94
mapping, 313–314
365
schemas
366
SQL Server Integration Services (SSIS)
367
SQL Server Management Objects (SMO)
368
Visual Studio
369
Visual Studio
370