TABLE 6-1Useful Query Editor Shortcuts Ctrl+Shift+R Refresh IntelliSense Ctrl+K+P Move to the previous bookmark Query options When a batch is sent from the Query Editor to SQL Server, se
Trang 1TABLE 6-1
Useful Query Editor Shortcuts
Ctrl+Shift+R Refresh IntelliSense
Ctrl+K+P Move to the previous bookmark
Query options
When a batch is sent from the Query Editor to SQL Server, several query option settings are included
with the batch The defaults for these settings can be set in Tools➪ Options ➪ Query Execution ➪
SQL Server The current query options can be viewed or changed in Query➪ Query Options, as shown
in Figure 6-9
FIGURE 6-9
Advanced and ANSI query options can be viewed and set using the Query Options dialog This view
shows the Advanced Query Options
Trang 2Executing SQL batches
As a developer’s tool, the Query Editor is designed to execute T-SQL batches, which are collections
of multiple T-SQL statements To submit a batch to SQL Server for processing, use Query➪ Execute
Query, click the Run Query toolbar button, use the F5 key, or press Ctrl+E (Personally, I’ve always
wanted a large button like the Staples® Easy button plugged into USB and programmed to F5 that I can
slam to execute the query.)
Because batches tend to be long, and it’s often desirable to execute a single T-SQL command or a
portion of the batch for testing or stepping through the code, the SQL Server team provides you with a
convenient feature If no text is highlighted, then the entire batch is executed If text is highlighted, only
that text is executed
You’ll learn more about this in Chapter 21, ‘‘Programming with T-SQL,’’ but technically, when the
Query Editor sends the script to SQL Server, it breaks it up into smaller batches separated by the batch
separator –go
It’s worth pointing out that the Parse Query menu command and toolbar button checks only the SQL
code It does not check object names (tables, columns, stored procedures, and so on) This actually is
a feature, not a bug By not including object name–checking in the syntax check, SQL Server permits
batches that create objects, and then references them
The T-SQL batch will execute within the context of a current database The current database is
displayed, and may be changed, within the database combo box in the toolbar
Results!
The results of the query are displayed in the bottom pane, along with the Messages tab, and optionally
the Client Statistics or Query Execution Plan tabs The Results tab format may be either text or grid;
you can switch using Ctrl+T or Ctrl+D, respectively The new format will be applied to the next batch
execution
Alternately, the results can be displayed in another tab, instead of at the bottom of the query document
In Options, use the Query Results➪ SQL Server ➪ Results to Grid tab, or the Query context menu
Results tab and choose the ‘‘Display results in a separate tab’’ option
Another useful result option is to play the Windows default beep sound file when a query completes
This can only be set in the Query➪ Option, Query Results ➪ SQL Server tab
SQL Server 2000’s Query Editor had a toolbar button to open or close the results pane It disappeared
with SQL Server 2005, but Ctrl+R still toggles the Query Editor results pane The command is still
in the Customize Toolbar dialog, so you can fix the toolbar if you’d like It’s called Show Results
Pane, and it’s not in the Query category where you’d expect to find it, but hiding in the Window
category
Viewing query execution plans
One of Query Editor’s most significant features is its ability to graphically view query execution plans
(see Figure 6-10)
Trang 3FIGURE 6-10
Query Editor’s ability to graphically display the execution plan of a query is perhaps its most useful
feature
What makes the query execution plans even more important is that SQL is a descriptive language,
so it doesn’t tell the Query Optimizer exactly how to get the data, but only which data to retrieve
While some performance tuning can be applied to the way the query is stated, most of the tuning is
accomplished by adjusting the indexes, which greatly affects how the Query Optimizer can compile the
query The query execution plan reveals how SQL Server will optimize the query, take advantage of
indexes, pull data from other data sources, and perform joins Reading the query execution plans and
understanding their interaction with the database schema and indexes is both a science and an art
Chapter 63, ‘‘Interpreting Query Execution Plans,’’ includes a full discussion on reading the query execution plan.
Query Editor can display either an estimated query execution plan prior to executing the query or the
actual plan after the query is run Both display the exact same plan, the only difference (besides the
Trang 4wait) is that the actual plan can display both the estimated and actual row counts for each operation,
whereas the estimated query execution plan provides only the estimated row count
In addition to the query execution plan, the Query Editor can display the client statistics, which is a
quick way to see the server execution times for the batch (although Profiler is a much better tool for
detail work.) Enable Include Client Statistics using the Query menu or toolbar to add this tab to the
results
Using the Solution Explorer
The optional Solution Explorer enables you to organize files and connections within solutions, which
contain projects, similar to the Solution Explorer in Visual Studio You don’t need to use it; File➪ Open
and Save work well without Solution Explorer, but if you work on several database projects, you may
find that Solution Explorer helps keep your life organized — or at least your code organized You can
find Solution Explorer in the View menu, and the Solution Explorer icon may be added to the Standard
toolbar using the Customize toolbar
To use Solution Explorer for managing query scripts, use the Solution Explorer context menu to create
a new project This will create the nodes and directories for the files Once the project exists, use it to
create new queries
Other than simply organizing your project, Solution Explorer offers two practical benefits One, if
queries are saved within a solution, bookmarks are retained Two, Solution Explorer can be used with
source control
Visual SourceSafe Integration
It’s possible to integrate Solution Explorer with Visual Studio SourceSafe or a third-party version control
utility to provide solid document management and version control
When source control is installed and enabled, scripts under the control of Solution Explorer will automatically
use the source control The following commands are added to Solution Explorer’s object context menu:
■ Check Out for Edit
■ Get Latest Version
■ Compare
■ Get
■ View History
■ Undo Checkout
Whether you use SourceSafe or integrate Management Studio with source control, I strongly suggest that you
use some method of checking your scripts into source control
Trang 5Jump-Starting Code with Templates
Management Studio templates are useful because they provide a starting point when programming new
types of code and they help make the code consistent
Using templates
To use a template, open the Template Explorer, select a template, and double-click This will open a
new query in the Query Editor using code from the template
You can also drag a template from the Template Explorer to an open Query and deposit the template
code into the query
The new query will likely include several template parameters Rather than edit these in text, you can
use a dialog box by selecting Query➪ Specify Values for Template Parameters (Crtl+Shift+M) Sorry,
but I didn’t find any way to automatically open this dialog, which has an entry for every parameter and
automatically fills in the parameters within the query If you make an error, the only way to go back is
to undo each parameter change (Ctrl+Z)
Managing templates
The templates are simply stored SQL scripts within a directory structure, which means it’s easy to create
your own templates or modify the existing ones Simply save the SQLscripts in the following directory:
\Documents and Settings\{user}\Application Data\Microsoft\
Microsoft SQL Server\100\Tools\Shell\Templates\
There’s more to saving templates than meets the eye A common copy is stored here:
%ProgramFiles%\Microsoft SQLServer\100\Tools\Binn\
VSShell\Common7\IDE\sqlworkbenchprojectitems
When Management Studio launches, it checks the two folders and any template in the common folder
that’s not in the local folder is copied to the local user folder
To add parameters to your custom templates, add the parameter name, the type, and the default value
inside angle brackets, like this:
<parameter name, data type, default value>
The data type is optional
For developers or organizations desiring consistency in their own development styles or standards, I
highly recommend taking advantage of Management Studio’s templates
Summary
Management Studio’s Object Explorer and Query Editor are the two primary DBA and developer interfaces
for SQL Server Mastering the navigation of both these tools is vital to your success with SQL Server
Trang 6Here are the few chapter takeaways:
■ Management Studio can be visually intimidating — so many windows I recommend closing
any window not needed for the task at hand Remove the distractions and get the job done
■ If you upgraded from SQL Server 2005 and haven’t taken the time to explore the new
Management Studio, you’re missing some of the best parts of SQL Server 2008
■ You may not need Registered Servers It’s only useful if you have a lot of servers
■ Management Studio offers a scalable experience The accidental DBA can use the wizards and
GUI, while the master DBA can work with raw T-SQL, DMV, and wait states
■ The T-SQL Debugger is back!
■ As the Query Editor is really the place where T-SQL happens, take the time to master its little
features, such as bookmarks, in order to get the most out of SQL Server
■ IntelliSense takes some getting used to, but when mastered, it’s great
■ Query Editor can now connect to multiple servers from a single tab — very useful for server
farm management
The next chapter rounds out Part I, ‘‘Laying the Foundation,’’ with a new interface for SQL Server that
holds a lot of promise for the power DBA: PowerShell
Trang 8Scripting with PowerShell
IN THIS CHAPTER
Introduction to PowerShell and PowerShell Scripting
Using PowerShell with SMO to automate SQL Server
administration Using PowerShell to extract SQL Server data
New SQL Server 2008 PowerShell features
PowerShell is the new scripting environment for the Microsoft Windows
platform For administrators who don’t have access to the Visual Studio
environment, or for the IT professional who prefers scripting to compiled
code, PowerShell provides access to most of the NET Framework and the objects
available within it PowerShell is available as a free download from Microsoft at
www.microsoft.com/powershell/ It’s also automatically installed when
SQL Server 2008 is installed, unless it’s already present PowerShell is included
with the Windows Server 2008 and later operating systems, but must be installed
on Windows 2003, Windows XP (SP2 or later), and Windows Vista It will not
run on operating systems earlier than those mentioned here
PowerShell was introduced in late 2006 to enable administrators to develop
scripts for automating processes they did regularly Prior to the introduction of
PowerShell, most administrators used command-line batch files, VBScript, or
some third-party proprietary application designed for this function
Batch files had somewhat limited functionality, and significant security problems
It was easy using batch files to ‘‘hijack’’ actual operating system commands by
cre-ating a batch file with the same name and placing it in a directory in the PATH
environment variable, or in the current directory Batch files also suffer significant
limitations with regard to iterative processes
VBScript was a better solution to the problem of iterative processes and provided
interfaces to many of the server products offered, but it lacked consistency and
was reliant on the COM object model The introduction of the NET Framework
rendered the COM object model obsolete (or nearly so)
PowerShell addresses these limitations through a strong security foundation that
prevents command-line hijacking by only allowing the user (by default) to run
digitally signed scripts, and by forcing the user to specify the directory for each
command run from the script environment It also supports the NET Framework
(2.0 and later), so the functionality built in the framework is available in this
scripting environment
Trang 9Why Use PowerShell?
In today’s business world it’s important to get as much done in as little time as possible The most
suc-cessful people are finding ways to automate every repetitive task for which they’re responsible
Consis-tency is important when automating tasks so that every administrator on the team is equally capable of
stepping in to help other team members when necessary
Microsoft has designated PowerShell as part of its common engineering criteria (CEC) for all server
prod-ucts This means that an administrator who’s responsible for Exchange or Active Directory will probably
have spent time learning PowerShell, and scripts written to manage SQL Server using PowerShell can be
understood by administrators without specific SQL Server knowledge Companies will be able to run
more efficiently with this common scripting language and administrators with skills in PowerShell will
be more valuable to their companies
Basic PowerShell
PowerShell, like any language, consists of commands, variables, functions, flow control methods, and
other features necessary to enable work to be done Because it is an interpreted language, the scripts
don’t have to be compiled into an executable form to be run
Language features
A cmdlet (command-let) is a command-line utility built into PowerShell to provide some functionality.
These cmdlets use a verb-noun naming convention, so it’s fairly easy to understand what they’re doing
Microsoft has provided about 130 built-in cmdlets with the default installation of PowerShell (1.0), and
additional cmdlets are installed depending on various server products that may be running PowerShell
2.0 is expected in mid-2009, but because it wasn’t ready for release when SQL Server 2008 was
shipped, the focus of this chapter is on PowerShell 1.0 (Version 2.0 expands the PowerShell language
and introduces an integrated development environment, similar to Visual Studio.)
Cmdlets are frequently aliased In other words, a different command can be entered to run the cmdlet,
rather than using its own name For example, when browsing a directory, the PowerShell cmdlet to
view the contents of the current directory isGet-ChildItem Users of the DOS operating system
(orcmd.exeon current windows systems) are familiar with thedircommand, and Unix users are
familiar with thelscommand All three of these commands do the same thing, and bothdirandls
are included with PowerShell as aliases of theGet-ChildItemcmdlet
A feature of Unix shell scripting environments is the capability to ‘‘pipe’’ the results of one command
into another command’s input buffer This is a feature of shell scripting that makes it so powerful — the
ability to string multiple commands together to provide information quickly PowerShell provides this
ability, but differs from Unix shell scripting in that the Unix pipe sends text from one command to
another, whereas PowerShell pipes objects from one cmdlet to another Unix scripts must parse the text
from one command using commands such asgrep,awk, andsedto format the text in a form the next
command expects PowerShell’s objects are understood by the receiving cmdlet and no such parsing is
required
Trang 10The PowerShell environment can be started in a number of different ways:
■ Select the Start button ➪ Programs ➪ Windows PowerShell 1.0, and then select Windows
PowerShell
■ From thecmd.execommand line, the ‘‘powershell’’ command will launch the environment as
well
■ There’s also the new SQL Server wrapper calledsqlps.exe, which is discussed later in the
chapter
The examples here are based on the standardpowershell.exeenvironment Normally, in the
Power-Shell environment, the user is informed of this by the prompt ‘‘PS>’’ at the beginning of the line where
the next command is to be entered
Here’s an example of using a series of cmdlets, piping the results of one to the next, and then filtering
the results to get useful information In this set of commands, theget-processcommand is used to
return a set of all processes on the system, pipe the results into a sort on the size of the workingset,
or the amount of memory each process is using, in descending order, and then select just the first 10,
returning the biggest memory hogs on the system:
get-process | sort-object workingset -descending |
select-object -first 10
Notice that PowerShell is not case sensitive In addition, the aliassortcould have been used instead of
the proper name ofsort-object, andselectcould have been used instead ofselect-object
This set of commands produces results like this:
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
- - - - - -
-637 82 163668 157312 1228 232.92 2132 sqlservr
535 80 120208 117256 1225 261.53 1344 sqlservr
562 18 99972 77364 357 457.14 3580 Ssms
598 11 52048 50352 179 57.86 4012 powershell
308 73 61612 45740 1155 156.54 728 sqlservr
602 17 57452 37956 255 298.60 1400 Reporting
ServicesService
494 10 26636 33144 155 5.93 3308 SQLPS
713 46 36704 27984 210 241.31 1264 msmdsrv
1011 42 12872 19556 80 144.29 808 svchost
158 4 12248 13272 104 2.22 1204 MsDtsSrvr
PowerShell variables are declared by preceding the variable name with the dollar sign ($) character
Variables are really objects of a particular type, and that data type can be created by preceding the
variable name with the data type in brackets ([]) For example, a variable called$counterthat’s an
integer object can be created and set to a value of 7as follows:
PS> $counter = 7