- SQL Server Reference Guide
- Introduction
- SQL Server Reference Guide Overview
- Table of Contents
- Microsoft SQL Server Defined
- SQL Server Editions
- SQL Server Access
- Informit Articles and Sample Chapters
- Online Resources
- Microsoft SQL Server Features
- SQL Server Books Online
- Clustering Services
- Data Transformation Services (DTS) Overview
- Replication Services
- Database Mirroring
- Natural Language Processing (NLP)
- Analysis Services
- Microsot SQL Server Reporting Services
- XML Overview
- Notification Services for the DBA
- Full-Text Search
- SQL Server 2005 - Service Broker
- Using SQL Server as a Web Service
- SQL Server Encryption Options Overview
- SQL Server 2008 Overview
- SQL Server 2008 R2 Overview
- SQL Azure
- The Utility Control Point and Data Application Component, Part 1
- The Utility Control Point and Data Application Component, Part 2
- Microsoft SQL Server Administration
- The DBA Survival Guide: The 10 Minute SQL Server Overview
- Preparing (or Tuning) a Windows System for SQL Server, Part 1
- Preparing (or Tuning) a Windows System for SQL Server, Part 2
- Installing SQL Server
- Upgrading SQL Server
- SQL Server 2000 Management Tools
- SQL Server 2005 Management Tools
- SQL Server 2008 Management Tools
- SQL Azure Tools
- Automating Tasks with SQL Server Agent
- Run Operating System Commands in SQL Agent using PowerShell
- Automating Tasks Without SQL Server Agent
- Storage – SQL Server I/O
- Service Packs, Hotfixes and Cumulative Upgrades
- Tracking SQL Server Information with Error and Event Logs
- Change Management
- SQL Server Metadata, Part One
- SQL Server Meta-Data, Part Two
- Monitoring - SQL Server 2005 Dynamic Views and Functions
- Monitoring - Performance Monitor
- Unattended Performance Monitoring for SQL Server
- Monitoring - User-Defined Performance Counters
- Monitoring: SQL Server Activity Monitor
- SQL Server Instances
- DBCC Commands
- SQL Server and Mail
- Database Maintenance Checklist
- The Maintenance Wizard: SQL Server 2000 and Earlier
- The Maintenance Wizard: SQL Server 2005 (SP2) and Later
- The Web Assistant Wizard
- Creating Web Pages from SQL Server
- SQL Server Security
- Securing the SQL Server Platform, Part 1
- Securing the SQL Server Platform, Part 2
- SQL Server Security: Users and other Principals
- SQL Server Security – Roles
- SQL Server Security: Objects (Securables)
- Security: Using the Command Line
- SQL Server Security - Encrypting Connections
- SQL Server Security: Encrypting Data
- SQL Server Security Audit
- High Availability - SQL Server Clustering
- SQL Server Configuration, Part 1
- SQL Server Configuration, Part 2
- Database Configuration Options
- 32- vs 64-bit Computing for SQL Server
- SQL Server and Memory
- Performance Tuning: Introduction to Indexes
- Statistical Indexes
- Backup and Recovery
- Backup and Recovery Examples, Part One
- Backup and Recovery Examples, Part Two: Transferring Databases to Another System (Even Without Backups)
- SQL Profiler - Reverse Engineering An Application
- SQL Trace
- SQL Server Alerts
- Files and Filegroups
- Partitioning
- Full-Text Indexes
- Read-Only Data
- SQL Server Locks
- Monitoring Locking and Deadlocking
- Controlling Locks in SQL Server
- SQL Server Policy-Based Management, Part One
- SQL Server Policy-Based Management, Part Two
- SQL Server Policy-Based Management, Part Three
- Microsoft SQL Server Programming
- An Outline for Development
- Database
- Database Services
- Database Objects: Databases
- Database Objects: Tables
- Database Objects: Table Relationships
- Database Objects: Keys
- Database Objects: Constraints
- Database Objects: Data Types
- Database Objects: Views
- Database Objects: Stored Procedures
- Database Objects: Indexes
- Database Objects: User Defined Functions
- Database Objects: Triggers
- Database Design: Requirements, Entities, and Attributes
- Business Process Model Notation (BPMN) and the Data Professional
- Business Questions for Database Design, Part One
- Business Questions for Database Design, Part Two
- Database Design: Finalizing Requirements and Defining Relationships
- Database Design: Creating an Entity Relationship Diagram
- Database Design: The Logical ERD
- Database Design: Adjusting The Model
- Database Design: Normalizing the Model
- Creating The Physical Model
- Database Design: Changing Attributes to Columns
- Database Design: Creating The Physical Database
- Database Design Example: Curriculum Vitae
- NULLs
- The SQL Server Sample Databases
- The SQL Server Sample Databases: pubs
- The SQL Server Sample Databases: NorthWind
- The SQL Server Sample Databases: AdventureWorks
- The SQL Server Sample Databases: Adventureworks Derivatives
- UniversalDB: The Demo and Testing Database, Part 1
- UniversalDB: The Demo and Testing Database, Part 2
- UniversalDB: The Demo and Testing Database, Part 3
- UniversalDB: The Demo and Testing Database, Part 4
- Getting Started with Transact-SQL
- Transact-SQL: Data Definition Language (DDL) Basics
- Transact-SQL: Limiting Results
- Transact-SQL: More Operators
- Transact-SQL: Ordering and Aggregating Data
- Transact-SQL: Subqueries
- Transact-SQL: Joins
- Transact-SQL: Complex Joins - Building a View with Multiple JOINs
- Transact-SQL: Inserts, Updates, and Deletes
- An Introduction to the CLR in SQL Server 2005
- Design Elements Part 1: Programming Flow Overview, Code Format and Commenting your Code
- Design Elements Part 2: Controlling SQL's Scope
- Design Elements Part 3: Error Handling
- Design Elements Part 4: Variables
- Design Elements Part 5: Where Does The Code Live?
- Design Elements Part 6: Math Operators and Functions
- Design Elements Part 7: Statistical Functions
- Design Elements Part 8: Summarization Statistical Algorithms
- Design Elements Part 9:Representing Data with Statistical Algorithms
- Design Elements Part 10: Interpreting the Data—Regression
- Design Elements Part 11: String Manipulation
- Design Elements Part 12: Loops
- Design Elements Part 13: Recursion
- Design Elements Part 14: Arrays
- Design Elements Part 15: Event-Driven Programming Vs. Scheduled Processes
- Design Elements Part 16: Event-Driven Programming
- Design Elements Part 17: Program Flow
- Forming Queries Part 1: Design
- Forming Queries Part 2: Query Basics
- Forming Queries Part 3: Query Optimization
- Forming Queries Part 4: SET Options
- Forming Queries Part 5: Table Optimization Hints
- Using SQL Server Templates
- Transact-SQL Unit Testing
- Index Tuning Wizard
- Unicode and SQL Server
- SQL Server Development Tools
- The SQL Server Transact-SQL Debugger
- The Transact-SQL Debugger, Part 2
- Basic Troubleshooting for Transact-SQL Code
- An Introduction to Spatial Data in SQL Server 2008
- Performance Tuning
- Performance Tuning SQL Server: Tools and Processes
- Performance Tuning SQL Server: Tools Overview
- Creating a Performance Tuning Audit - Defining Components
- Creating a Performance Tuning Audit - Evaluation Part One
- Creating a Performance Tuning Audit - Evaluation Part Two
- Creating a Performance Tuning Audit - Interpretation
- Creating a Performance Tuning Audit - Developing an Action Plan
- Understanding SQL Server Query Plans
- Performance Tuning: Implementing Indexes
- Performance Monitoring Tools: Windows 2008 (and Higher) Server Utilities, Part 1
- Performance Monitoring Tools: Windows 2008 (and Higher) Server Utilities, Part 2
- Performance Monitoring Tools: Windows System Monitor
- Performance Monitoring Tools: Logging with System Monitor
- Performance Monitoring Tools: User Defined Counters
- General Transact-SQL (T-SQL) Performance Tuning, Part 1
- General Transact-SQL (T-SQL) Performance Tuning, Part 2
- General Transact-SQL (T-SQL) Performance Tuning, Part 3
- Performance Monitoring Tools: An Introduction to SQL Profiler
- Performance Tuning: Introduction to Indexes
- Performance Monitoring Tools: SQL Server 2000 Index Tuning Wizard
- Performance Monitoring Tools: SQL Server 2005 Database Tuning Advisor
- Performance Monitoring Tools: SQL Server Management Studio Reports
- Performance Monitoring Tools: SQL Server 2008 Activity Monitor
- The SQL Server 2008 Management Data Warehouse and Data Collector
- Performance Monitoring Tools: Evaluating Wait States with PowerShell and Excel
- Practical Applications
- Choosing the Back End
- The DBA's Toolbox, Part 1
- The DBA's Toolbox, Part 2
- Scripting Solutions for SQL Server
- Building a SQL Server Lab
- Using Graphics Files with SQL Server
- Enterprise Resource Planning
- Customer Relationship Management (CRM)
- Building a Reporting Data Server
- Building a Database Documenter, Part 1
- Building a Database Documenter, Part 2
- Data Management Objects
- Data Management Objects: The Server Object
- Data Management Objects: Server Object Methods
- Data Management Objects: Collections and the Database Object
- Data Management Objects: Database Information
- Data Management Objects: Database Control
- Data Management Objects: Database Maintenance
- Data Management Objects: Logging the Process
- Data Management Objects: Running SQL Statements
- Data Management Objects: Multiple Row Returns
- Data Management Objects: Other Database Objects
- Data Management Objects: Security
- Data Management Objects: Scripting
- Powershell and SQL Server - Overview
- PowerShell and SQL Server - Objects and Providers
- Powershell and SQL Server - A Script Framework
- Powershell and SQL Server - Logging the Process
- Powershell and SQL Server - Reading a Control File
- Powershell and SQL Server - SQL Server Access
- Powershell and SQL Server - Web Pages from a SQL Query
- Powershell and SQL Server - Scrubbing the Event Logs
- SQL Server 2008 PowerShell Provider
- SQL Server I/O: Importing and Exporting Data
- SQL Server I/O: XML in Database Terms
- SQL Server I/O: Creating XML Output
- SQL Server I/O: Reading XML Documents
- SQL Server I/O: Using XML Control Mechanisms
- SQL Server I/O: Creating Hierarchies
- SQL Server I/O: Using HTTP with SQL Server XML
- SQL Server I/O: Using HTTP with SQL Server XML Templates
- SQL Server I/O: Remote Queries
- SQL Server I/O: Working with Text Files
- Using Microsoft SQL Server on Handheld Devices
- Front-Ends 101: Microsoft Access
- Comparing Two SQL Server Databases
- English Query - Part 1
- English Query - Part 2
- English Query - Part 3
- English Query - Part 4
- English Query - Part 5
- RSS Feeds from SQL Server
- Using SQL Server Agent to Monitor Backups
- Reporting Services - Creating a Maintenance Report
- SQL Server Chargeback Strategies, Part 1
- SQL Server Chargeback Strategies, Part 2
- SQL Server Replication Example
- Creating a Master Agent and Alert Server
- The SQL Server Central Management System: Definition
- The SQL Server Central Management System: Base Tables
- The SQL Server Central Management System: Execution of Server Information (Part 1)
- The SQL Server Central Management System: Execution of Server Information (Part 2)
- The SQL Server Central Management System: Collecting Performance Metrics
- The SQL Server Central Management System: Centralizing Agent Jobs, Events and Scripts
- The SQL Server Central Management System: Reporting the Data and Project Summary
- Time Tracking for SQL Server Operations
- Migrating Departmental Data Stores to SQL Server
- Migrating Departmental Data Stores to SQL Server: Model the System
- Migrating Departmental Data Stores to SQL Server: Model the System, Continued
- Migrating Departmental Data Stores to SQL Server: Decide on the Destination
- Migrating Departmental Data Stores to SQL Server: Design the ETL
- Migrating Departmental Data Stores to SQL Server: Design the ETL, Continued
- Migrating Departmental Data Stores to SQL Server: Attach the Front End, Test, and Monitor
- Tracking SQL Server Timed Events, Part 1
- Tracking SQL Server Timed Events, Part 2
- Patterns and Practices for the Data Professional
- Managing Vendor Databases
- Consolidation Options
- Connecting to a SQL Azure Database from Microsoft Access
- SharePoint 2007 and SQL Server, Part One
- SharePoint 2007 and SQL Server, Part Two
- SharePoint 2007 and SQL Server, Part Three
- Querying Multiple Data Sources from a Single Location (Distributed Queries)
- Importing and Exporting Data for SQL Azure
- Working on Distributed Teams
- Professional Development
- Becoming a DBA
- Certification
- DBA Levels
- Becoming a Data Professional
- SQL Server Professional Development Plan, Part 1
- SQL Server Professional Development Plan, Part 2
- SQL Server Professional Development Plan, Part 3
- Evaluating Technical Options
- System Sizing
- Creating a Disaster Recovery Plan
- Anatomy of a Disaster (Response Plan)
- Database Troubleshooting
- Conducting an Effective Code Review
- Developing an Exit Strategy
- Data Retention Strategy
- Keeping Your DBA/Developer Job in Troubled Times
- The SQL Server Runbook
- Creating and Maintaining a SQL Server Configuration History, Part 1
- Creating and Maintaining a SQL Server Configuration History, Part 2
- Creating an Application Profile, Part 1
- Creating an Application Profile, Part 2
- How to Attend a Technical Conference
- Tips for Maximizing Your IT Budget This Year
- The Importance of Blue-Sky Planning
- Application Architecture Assessments
- Transact-SQL Code Reviews, Part One
- Transact-SQL Code Reviews, Part Two
- Cloud Computing (Distributed Computing) Paradigms
- NoSQL for the SQL Server Professional, Part One
- NoSQL for the SQL Server Professional, Part Two
- Object-Role Modeling (ORM) for the Database Professional
- Business Intelligence
- BI Explained
- Developing a Data Dictionary
- BI Security
- Gathering BI Requirements
- Source System Extracts and Transforms
- ETL Mechanisms
- Business Intelligence Landscapes
- Business Intelligence Layouts and the Build or Buy Decision
- A Single Version of the Truth
- The Operational Data Store (ODS)
- Data Marts – Combining and Transforming Data
- Designing Data Elements
- The Enterprise Data Warehouse — Aggregations and the Star Schema
- On-Line Analytical Processing (OLAP)
- Data Mining
- Key Performance Indicators
- BI Presentation - Client Tools
- BI Presentation - Portals
- Implementing ETL - Introduction to SQL Server 2005 Integration Services
- Building a Business Intelligence Solution, Part 1
- Building a Business Intelligence Solution, Part 2
- Building a Business Intelligence Solution, Part 3
- Tips and Troubleshooting
- SQL Server and Microsoft Excel Integration
- Tips for the SQL Server Tools: SQL Server 2000
- Tips for the SQL Server Tools – SQL Server 2005
- Transaction Log Troubles
- SQL Server Connection Problems
- Orphaned Database Users
- Additional Resources
- Tools and Downloads
- Utilities (Free)
- Tool Review (Free): DBDesignerFork
- Aqua Data Studio
- Microsoft SQL Server Best Practices Analyzer
- Utilities (Cost)
- Quest Software's TOAD for SQL Server
- Quest Software's Spotlight on SQL Server
- SQL Server on Microsoft's Virtual PC
- Red Gate SQL Bundle
- Microsoft's Visio for Database Folks
- Quest Capacity Manager
- SQL Server Help
- Visual Studio Team Edition for Database Professionals
- Microsoft Assessment and Planning Solution Accelerator
- Aggregating Server Data from the MAPS Tool
Partitioning is the act of dividing up data onto different hardware or logical locations. Most database systems, even older manual file/table based versions, partition data. And it's the heart of a relational database system to split data into multiple tables.
But given that a relational system is already partitioned, there are some steps you can take to break out your data even further. Before we talk about that, we need to talk about why you would need (or want) to.
The first reason that you might want to place data on different hardware is for performance. While SQL Server doesn't have a problem with large tables, when you get a lot of data on a single physical device you can experience a slowdown on the I/O system.
Another reason that you would partition data is for maintenance. When you need to rebuild an index, especially one that has a lot of rows on the same physical device as the table your users are working in, you can create a bottleneck again on the I/O subsystem.
One of the most popular reasons to partition data is to distribute it for availability. This means that you can create a kind of "archive" of the data onto another device. I've done this for reporting systems and other kinds of archival.
There are several manual methods you can use to partition data. The simplest to implement is a combination of processes and code. Let's look at a concrete example of this approach. Assume you have an order processing system which takes several thousand orders a day. As time goes on, the orders table can grow quite large. But you can't just remove the data, because from time to time you need to report on it.
Using a bit of code, you can select the records you don't need to process the next day's orders from the main table and copy them to another table. You can then delete those rows from the main table. Of course, eventually the second table gets overly large, so you'll have to write more code to determine the size and create a third table and so on.
You can automate this first part with a job and a stored procedure, but you'll need to code the application now to find the data as it moves more and more data from table to table. And there are other coding and manual process strategies you can use like this one to move your data from a large table to smaller ones, recombining the data when you need it with carefully crafted UNION statements. Here's an example of that:
/* Create a database */ CREATE DATABASE Test; GO USE Test; GO /* Create a table for current orders, fill it with some data */ CREATE TABLE CurrentOrders ( OrderNumber int , OrderDetail varchar (255)); GO INSERT INTO CurrentOrders VALUES (3, ’Third Item’) GO /* Create a table for archived orders, fill it with some data */ CREATE TABLE ArchivedOrders ( OrderNumber int , OrderDetail varchar (255)); GO INSERT INTO ArchivedOrders VALUES (1, ’First Item’) GO INSERT INTO ArchivedOrders VALUES (2, ’Second Item’) GO /* Now select the data from both tables as if it were one */ SELECT OrderNumber, OrderDetail FROM CurrentOrders UNION ALL SELECT OrderNumber, OrderDetail FROM ArchivedOrders ORDER BY OrderNumber /* Clean up */ USE master; GO DROP DATABASE Test; GO
This works just fine, but it can be a nightmare to maintain. What happens when you change a column or its format? What about when you want to change the "window" on the data you're moving from size-based to perhaps date or region?
Not only that, using this method you really haven't solved the initial problem — the data still resides on the same physical I/O subsystem, so you can still have a lag in performance. Not only that, for the data that you delete from the original table, you use a DELETE statement. For systems that are in production use, the databases are normally set to use a logged model, which means that all the delete operations will go through the transaction log — and that can take a lot of time for a lot of deletes.
To solve the first problem, you can use SQL Server's Files and Filegroups. The idea is that you create some Filegroups (that contain files) on different drives (not just drive letters, mind you, but physical drives), and place different tables on those Filegroups. Now when you're work with the tables, you're using separate I/O devices. Once you set up this strategy, you can follow your code and manual process approach.
Note that what I've just described, placing different rows in different tables, is an example of horizontal portioning. When you need to divide the data into different columns, that's called vertical partitioning.
Partitioning in SQL Server 2000
In SQL Server 2000, you can use two primary strategies to extend the programmatic approach I've described: Federating and Distributed Partitioned Views.
Federated Servers are groups of servers used for a single application of data storage. In this scenario you separate not only the I/O but all parts of the hardware. This process requires a pretty disciplined approach for the data planning, a middle-tier for the application, and good coordination between your developers and DBA's. You can learn more about what you need to do to implement this architecture at the end of this tutorial.
The second tool you have in SQL Server 2000 to implement partitioning is using a Distributed Partition View. Of course, you can use a regular view with the UNION statement as I mentioned earlier. Here's that example changed to use a view instead of a simple select statement:
/* Create a database */ CREATE DATABASE Test; GO USE Test; GO /* Create a table for current orders, fill it with some data */ CREATE TABLE CurrentOrders ( OrderNumber int , OrderDetail varchar (255)); GO INSERT INTO CurrentOrders VALUES (3, ’Third Item’) GO /* Create a table for archived orders, fill it with some data */ CREATE TABLE ArchivedOrders ( OrderNumber int , OrderDetail varchar (255)); GO INSERT INTO ArchivedOrders VALUES (1, ’First Item’) GO INSERT INTO ArchivedOrders VALUES (2, ’Second Item’) GO /* Now create a view that selects the data from both tables as if it were one */ CREATE VIEW TestView AS SELECT OrderNumber, OrderDetail FROM CurrentOrders UNION ALL SELECT OrderNumber, OrderDetail FROM ArchivedOrders; GO SELECT * FROM TestView ORDER BY OrderNumber /* Clean up */ USE master; GO DROP DATABASE Test; GO
But to take this to the next level, you can use this new feature in SQL Server 2000. The process is fairly simple:
- [lb] Create a linked server.
- [lb] Create the view with a four-part name (Server.Database.Owner.Object) for the columns in the view on each of the servers involved.
- [lb] Run a query against the view.
I can't show an example of this, since it would involve knowing the name of your servers. But the process is very straightforward. You can even create these kinds of views that allow you to update data, in limited circumstances.
There are, however, some fairly hefty restrictions on these kinds of views, and using distributed data can be slow. This is not only due to the network issues, but also because it is difficult for the Query Processor to figure out what to do. You can read much more about the restrictions and the process for creating the views here.
Partitioning in SQL Server 2005
In SQL Server 2005, the ability to partition data is greatly enhanced. You have a lot more control over when and how the data is separated. In the previous versions, you had to manually "switch" the data over, and you had to make lots of decisions about when you move that data. In SQL Server, you get two constructs that will do a lot of the work for you: A Partition Function and a Partition Scheme. Microsoft documentation presents them in this order, and that's how you need to set them up.
The Partition Function tells the data how to break apart. You can choose a date range, a list of included values, and more. The Partition Scheme tells the data where to go. The way you use them is to create the function and tie it to a scheme. Then the function will intercept the data and use the scheme to store the data properly, so you have to do less work.
But I think it makes more sense to create the scheme first, and then create the function to use it. This is probably because I came from the hardware side of the house lo these many years ago, and Microsoft is full of developers. I guess to a developer, functions come first!
Let's take a look at the basics of the process. Once again, it's hard to demonstrate since your drives will be different than the ones I have. There are some other resources I have at the bottom of this tutorial that will go through a more detailed view using the AdventureWorks sample database.
Create the Partition Function
I normally start with the decision that I need to partition, as I described earlier. I try to do this during the design phase of the system, assuming I know it will either be very large or grow large. Sometimes, however, you can't do that. Things change, and your system needs to change with them.
After you make that decision on the data side, you need to set up your Filegroups. I cover more information on that here.
Next, you create the Partition Function. Unfortunately, this is not a graphical procedure, so you'll need to run a query to do it. You use the CREATE PARTITION FUNCTION statement, followed by how you want to break out the data. Here's the full statement syntax:
CREATE PARTITION FUNCTION partition_function_name ( input parameter type )
AS RANGE LEFT
or
AS RANGE RIGHT
FOR VALUES ( values)
Let's break that down a little. Following the CREATE PARTITION FUNCTION statement is the name of the function, which you'll need in a moment to tie to the scheme. Following that are parenthesis which contains the data type you're going to separate the data on. Let's assume that you want to break down data by a field which happens to be an integer. In that case, it would look something like this:
CREATE PARTITION FUNCTION MyNewPartitionFunction (INT)
Now you have two choices: RANGE LEFT or RANGE RIGHT. If you think of a number line, then the break will happen to the left or right of the numbers (or dates or characters) that you pick in the next line. I'll show you an example in a minute, but let's keep building the statement so far, using the LEFT choice:
CREATE PARTITION FUNCTION MyNewPartitionFunction (INT)
AS RANGE LEFT
Now the final part: the values you want to break on. This is where you really take your time in the design. You're going to pick a number of variables, in the type you defined, to make the break (left or right) on. So for instance if you are going to have the numbers 1-1000 for part numbers made in Canada, and numbers 1001-2000 for parts made in the United States.
The number(s) you pick here divide the data — so if you pick one number (as I will in this example) then you will have two partitions — one on one side of the number and the other on the other side. So here's the completed function:
CREATE PARTITION FUNCTION MyNewPartitionFunction (INT)
AS RANGE LEFT
FOR VALUES (1000)
Now all numbers less than (or equal to) 1000 go on the first partition (which we'll assign in the next step) and the numbers higher than 1000 will go on the second one. If we had a three way split, say up to 1000, up to 2000, and above that, we would change the VALUES statement this way:
FOR VALUES (1000, 2000)
You can see that the numbers are one less than the partitions we need. Now let's turn to the Partition Scheme.
Create the Partition Scheme
To create the Partition Scheme, you just use the CREATE PARTITION SCHEME command. Here's the format:
CREATE PARTITION SCHEME partition scheme name
AS PARTITION partition function name
ALL TO ( single file group name )
or
ALL TO ( PRIMARY)
or
TO (file group names)
Let's break that down again. Following the CREATE PARTITION SCHEME command, you need to give it a name. Here's our example:
CREATE PARTITION SCHEME MyNewPartitionScheme
Next we tie the partition scheme to the partition function with the AS PARTITON command:
AS PARTITION MyNewPartitionFunction
Now you tie out the scheme and the function to an actual Filegroup. You have three choices. If you tell the function to use the ALL optional qualifier, you can either use the DEFAULT Filegroup or another one, but you can only use one. I normally never do this, since it kind of defeats the purpose in most cases.
Instead, I use the third option. All you have to do is make sure that you lay out the Scheme the same way as what you want broken out. Of course this time the number of Filegroups matches the actual number of partitions. So with two Filegroups on our test system called FileGroup1 and FileGroup2, we'll put the 1-1000 values on FileGroup1 and the 1001-2000 values on FileGroup2:
CREATE PARTITION SCHEME partition scheme name
AS PARTITION partition function name
TO (FileGroup1, FileGroup2)
Create Tables on the Partition Scheme
We're to the final step – creating the tables to actually store the data. you'll create it as normal, but with a special twist: using the ON qualifier you specify the table to go to the Partition Scheme you made. Here's how that would look for our example:
CREATE TABLE MyNewTable ( PartNumber INT , PartDescription varchar(255)); ON MyNewPartitionScheme (PartNumber); GO
Notice at the end of the ON qualifier you need to specify the column that ties to the function that ties to the scheme.
And you're done! Of course there is a lot more to this, but this quick tutorial should get you started testing. There's more in the references section that follows.
InformIT Articles and Sample Chapters
Eric Brown has more information on working with Partitions and other large database strategies here.
Online Resources
To learn more about implementing a SQL Server 2000 Federated Server, click here.
There's more on the SQL Server 2005 Partitioning strategies here.