14.07.2013 Views

MS Database Software - Cultural View

MS Database Software - Cultural View

MS Database Software - Cultural View

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>MS</strong> <strong>Database</strong> <strong>Software</strong><br />

PDF generated using the open source mwlib toolkit. See http://code.pediapress.com/ for more information.<br />

PDF generated at: Sun, 23 May 2010 14:06:17 UTC


Contents<br />

Articles<br />

Microsoft Access 1<br />

Microsoft SQL Server 10<br />

SQL CLR 23<br />

SQL Query Analyzer 24<br />

SQL Server Integration Services 24<br />

SQL Server Management Studio 27<br />

SQL Server Notification Services 28<br />

SQL Server Reporting Services 29<br />

Microsoft Query by Example 31<br />

Microsoft Analysis Services 32<br />

Professional Association for SQL Server 35<br />

AutoNumber 36<br />

Bulk Copy Program 38<br />

Business Intelligence Development Studio 39<br />

Scome 39<br />

Data Transformation Services 41<br />

<strong>Database</strong> engine tuning advisor 44<br />

Enterprise Manager 44<br />

Extensible Storage Engine 45<br />

FoxPro 2 54<br />

Microsoft Jet <strong>Database</strong> Engine 56<br />

Report Definition Language 63<br />

Upsizing (database) 64<br />

Visual FoxPro 65<br />

XLeratorDB 71<br />

References<br />

Article Sources and Contributors 76<br />

Image Sources, Licenses and Contributors 78<br />

Article Licenses<br />

License 79


Microsoft Access 1<br />

Microsoft Access<br />

Developer(s) Microsoft<br />

Initial release 1.0 / November 1992<br />

Stable release 12.0.6425.1000 (2007 SP2) / April 28, 2009<br />

Operating<br />

system<br />

Type RDB<strong>MS</strong><br />

Microsoft Windows<br />

License Proprietary EULA<br />

Website [1] [1]<br />

Microsoft Office Access, previously known as Microsoft Access, is a pseudo relational database management<br />

system from Microsoft that combines the relational Microsoft Jet <strong>Database</strong> Engine with a graphical user interface<br />

and software development tools. It is a member of the Microsoft Office suite of applications, included in the<br />

Professional and higher editions or sold separately. The current version is Microsoft Office Access 2007; Microsoft<br />

Access 2010 is in beta as of May 10, 2010.<br />

Access stores data in its own format based on the Access Jet <strong>Database</strong> Engine. It can also import or link directly to<br />

data stored in other Access databases, Excel, SharePoint lists, text, XML, Outlook, HTML, dBase, Paradox, Lotus<br />

1-2-3, or any ODBC-compliant data container, including Microsoft SQL Server, Oracle, MySQL, and<br />

PostgreSQL.<strong>Software</strong> developers and data architects can use it to develop application software, and "power users"<br />

can use it to build simple applications. Like other Office applications, Access is supported by Visual Basic for<br />

Applications, an object-oriented programming language that can reference a variety of objects including DAO (Data<br />

Access Objects), ActiveX Data Objects, and many other ActiveX components. Visual objects used in forms and<br />

reports expose their methods and properties in the VBA programming environment, and VBA code modules may<br />

declare and call Windows operating system functions.<br />

History<br />

Access version 1.0 was released in 13 November 1992, quickly followed in May 1993 by an Access 1.1 release to<br />

improve compatibility with other Microsoft products and include the Access Basic programming language.<br />

Microsoft specified the minimum hardware requirements for Access v2.0: Microsoft Windows v3.1 with 4 MB of<br />

RAM required, 6 MB RAM recommended; 8 MB of available hard disk space required, 14 MB hard disk space<br />

recommended. The product was shipped on seven 1.44 MB diskettes. The manual shows a 1993 copyright date.<br />

Originally, the software worked well with relatively small databases but testing showed some circumstances caused<br />

data corruption. For example, file sizes over 10 MB were problematic (note that most hard disks were smaller than<br />

500 MB at the time this was in wide use), and the Getting Started manual warns about a number of circumstances<br />

where obsolete device drivers or incorrect configurations can cause data loss. With the phasing out of Windows 95,<br />

98 and ME, improved network reliability, and Microsoft having released 8 service packs for the Jet <strong>Database</strong> Engine,<br />

the reliability of Access databases has been vastly improved in both size and number of users.<br />

With Office 95, Microsoft Access 7.0 (a.k.a "Access 95") became part of the Microsoft Office Professional Suite<br />

joining Microsoft Excel, Word, and PowerPoint and transitioning from Access Basic to Visual Basic for<br />

Applications (VBA). Since then, there have been releases of Microsoft Access with each release of Office. This


Microsoft Access 2<br />

includes Access 97 (version 8.0), Access 2000 (version 9.0), Access 2002 (version 10.0), Access 2003 (version<br />

11.5), and Access 2007 (version 12.0).<br />

The native Access database format (the Jet MDB <strong>Database</strong>) has also evolved over the years. Formats include Access<br />

1.0, 1.1, 2.0, 7.0, 97, 2000, 2002, and 2007. The most significant transition was from the Access 97 to the Access<br />

2000 format; which is not backward compatible with earlier versions of Access. At the time of this writing, all newer<br />

versions of Access support the Access 2000 format. New features were added to the Access 2002 format which can<br />

be used by Access 2002, 2003, 2007, and 2010.<br />

In Access 2007, a new database format was introduced: ACCDB. The ACCDB supports complex data types such as<br />

multivalue and attachment fields. These new field types are essentially recordsets in fields and allow the storage of<br />

multiple values in one field.<br />

Prior to the introduction of Access, the desktop database market was dominated by Borland with their Paradox and<br />

dBase programs, and FoxPro. Microsoft Access was the first mass market database program for Windows. With the<br />

purchase of FoxPro and incorporating its Rushmore query optimization routines into Access, Microsoft Access<br />

quickly became the dominant database for Windows effectively eliminating the competition which failed to<br />

transition from the <strong>MS</strong>-DOS world. [2]<br />

Access's initial codename was Cirrus; the forms engine was called Ruby. This was before Visual Basic - Bill Gates<br />

saw the prototypes and decided that the BASIC language component should be co-developed as a separate<br />

expandable application, a project called Thunder. The two projects were developed separately as the underlying<br />

forms engines were incompatible with each other; however, these were merged together again after VBA.<br />

Access was also the name of a communications program from Microsoft, meant to compete with ProComm and<br />

other programs. This proved a failure and was dropped. [3] Years later, Microsoft reused the name for its database<br />

software.<br />

Uses<br />

Microsoft Access is used to create simple database solutions. Access tables support a variety of standard field types,<br />

indices, and referential integrity. Access also includes a query interface, forms to display and enter data, and reports<br />

for printing. The underlying Jet database, which contains these objects, is multiuser-aware and handles<br />

record-locking and referential integrity including cascading updates and deletes.<br />

Simple tasks can be automated through macros with point-and-click options. Microsoft Access is very popular<br />

among non-programmers who can create visually pleasing and relatively advanced solutions on their own. It is also<br />

easy to place a database on a network and have multiple users share and update data without overwriting each other’s<br />

work. Data is locked at the record level which is significantly different from Excel which locks the entire<br />

spreadsheet.<br />

Microsoft offers a wide range of template databases within the program and for download from their website [4] .<br />

These options are available upon starting Access and allow users to quickly use and enhance a database with<br />

pre-defined tables, queries, forms, reports, and macros. Popular templates include tracking contacts, assets, issues,<br />

events, projects, and tasks. Templates do not include VBA code.<br />

Microsoft Access also offers the ability for programmers to create solutions using the programming language Visual<br />

Basic for Applications (VBA), which is similar to Visual Basic 6.0 (VB6) and used throughout the Microsoft Office<br />

programs such as Excel, Word, Outlook and PowerPoint. Most VB6 code including the use of Windows API calls,<br />

can be used in VBA. Power users and developers can extend basic end-user solutions to a professional solution with<br />

advanced automation, data validation, error trapping, and multi-user support.<br />

<strong>Database</strong> solutions created entirely in Microsoft Access are well suited for individual and workgroup use across a<br />

network. The number of simultaneous users that can be supported depends on the amount of data, the tasks being<br />

performed, level of use, and application design. Generally accepted limits are solutions with 1 GB or less of data


Microsoft Access 3<br />

(Access supports up to 2 GB) and 50 or fewer simultaneous users. This is appropriate for workgroup and department<br />

solutions where the total number of users number a few hundred.<br />

Applications that simply view data or have simple data entry can support considerably more users. Applications that<br />

run complex queries or analysis across large datasets would naturally require greater bandwidth and memory.<br />

Microsoft Access is designed to scale to support more data and users by linking to multiple Access databases or<br />

using a back-end database like Microsoft SQL Server. With the latter design, the amount of data and users can scale<br />

to enterprise-level solutions.<br />

Microsoft Access' role in web development prior to version 2010 is limited. User interface features of Access, such<br />

as forms and reports, only work in Windows. The Microsoft Jet <strong>Database</strong> Engine, core to Access, can be accessed<br />

through technologies such as ODBC or OLE DB. The data (i.e., tables and queries) can be accessed by web-based<br />

applications developed in ASP.NET, PHP, or Java. Many ISPs offer Microsoft Access as a data storage option.<br />

Access 2010 will allow forms and reports to be published to web sites using what is called "access web services" that<br />

runs on Sharepoint software. These web based forms and reports run in any standard browser. The resulting web<br />

forms and reports when run in the browser don't require any ActiveX or add-ins like Silverlight. Thus, the resulting<br />

application can be used by running Firefox on Ubuntu Linux, for example.<br />

In enterprise environments, Microsoft Access is particularly appropriate for meeting end-user database needs and for<br />

rapid application development. Microsoft Access is easy enough for end users to create their own queries, forms and<br />

reports, laying out fields and groupings, setting formats, etc. This frees up the professional developers to focus on<br />

more complex portions of the application.<br />

A compiled MDE or ACCDE version of an Access database can be created to prevent users from getting to the<br />

design surfaces to modify module code, forms, and reports. This is often used in environments where end-user<br />

modifications are discouraged or the application's code should be kept private.<br />

Microsoft offers a runtime version of Microsoft Access 2007 for download [5] . This allows people to create Access<br />

solutions and distribute it for use by non-Microsoft Access owners (similar to the way DLLs or EXEs are<br />

distributed). Unlike the regular version of Access, the runtime version allows users to use the Access application but<br />

they cannot use its design surfaces.<br />

Microsoft also offers developer extensions [6] for download to help distribute Access applications, create database<br />

templates, and integrate source code control with Microsoft Visual SourceSafe.<br />

Features<br />

Users can create tables, queries, forms and reports, and connect them together with macros. Advanced users can use<br />

VBA to write rich solutions with advanced data manipulation and user control.<br />

The original concept of Access was for end users to be able to “access” data from any source. Other uses include: the<br />

import and export of data to many formats including Excel, Outlook, ASCII, dBase, Paradox, FoxPro, SQL Server,<br />

Oracle, ODBC, etc. It also has the ability to link to data in its existing location and use it for viewing, querying,<br />

editing, and reporting. This allows the existing data to change and the Access platform to always use the latest data.<br />

It can perform heterogeneous joins between data sets stored across different platforms. Access is often used by<br />

people downloading data from enterprise level databases for manipulation, analysis, and reporting locally.<br />

There is also the Jet <strong>Database</strong> format (MDB or ACCDB in Access 2007) which can contain the application and data<br />

in one file. This makes it very convenient to distribute the entire application to another user, who can run it in<br />

disconnected environments.<br />

One of the benefits of Access from a programmer's perspective is its relative compatibility with SQL (structured<br />

query language) — queries can be viewed graphically or edited as SQL statements, and SQL statements can be used<br />

directly in Macros and VBA Modules to manipulate Access tables. Users can mix and use both VBA and "Macros"<br />

for programming forms and logic and offers object-oriented possibilities. VBA can also be included in queries.


Microsoft Access 4<br />

Microsoft Access offers parameterized queries. These queries and Access tables can be referenced from other<br />

programs like VB6 and .NET through DAO or ADO. From Microsoft Access, VBA can reference parameterized<br />

stored procedures via ADO.<br />

The desktop editions of Microsoft SQL Server can be used with Access as an alternative to the Jet <strong>Database</strong> Engine.<br />

This support started with <strong>MS</strong>DE (Microsoft SQL Server Desktop Engine), a scaled down version of Microsoft SQL<br />

Server 2000, and continues with the SQL Server Express versions of SQL Server 2005 and 2008.<br />

Microsoft Access is a file server-based database. Unlike client–server relational database management systems<br />

(RDB<strong>MS</strong>), Microsoft Access does not implement database triggers, stored procedures, or transaction logging.<br />

Access 2010 does now include table level triggers and stored procedures built into the ACE data engine. Thus a<br />

Client-server database system is not a requirement for using stored procedures or table triggers with Access 2010.<br />

Tables, queries, Forms, reports and Macros can now be developed specifically for web base application in Access<br />

2010. Integration with Microsoft SharePoint 2010 is also highly improved.<br />

Development<br />

All database tables, queries, forms, reports, macros, and modules are stored in the Access Jet database as a single<br />

file.<br />

For query development, Access offers a Query Designer, a graphical user interface that allows users to create queries<br />

without knowledge of the SQL programming language. In the Query Designer, users can "show" the datasources of<br />

the query (which can be tables or queries) and select the fields they want returned by clicking and dragging them into<br />

the grid. Joins can be created by clicking and dragging fields in tables to fields in other tables. Access allows users to<br />

view and manipulate the SQL code if desired. Any Access table, including linked tables from different data sources,<br />

can be used in a query.<br />

Access also supports the creation of Pass-Through queries. These are queries that can be linked to external data<br />

sources through the use of ODBC connections on the local machine. This enables users to interact with data stored<br />

outside the Access programme without using linked Tables. The Pass-Through queries are written using the SQL<br />

syntax supported by the external data source.<br />

When developing Reports that are linked to Queries placing or moving items in the design view of the Report,<br />

Access runs the linked query in the background on any placement or movement of an item in that Report. If the<br />

Report is linked to a Query that takes a long time to return records this forces you to wait until the query has run<br />

before you can add/edit or move the next item in the Report (this feature cannot be turned off).<br />

Non-programmers can use the macro feature to automate simple tasks through a series of drop down selections.<br />

Macros allow users to easily chain commands together such as running queries, importing or exporting data, opening<br />

and closing forms, previewing and printing reports, etc. Macros support basic logic (IF conditions) and the ability to<br />

call other macros. Macros can also contain sub-macros which are similar to subroutines. In Access 2007, macros are<br />

significantly enhanced with the inclusion of error handling and temporary variable support. Access 2007 also<br />

introduces embedded macros that are essentially properties of an object's event. This eliminates the need to store<br />

macros as individual objects. Macros however, are limited in their functionality by a lack of programming loops and<br />

advanced coding logic. Most professional Access developers use the VBA programming language for a richer and<br />

more powerful development environment.<br />

The programming language available in Access is, as in other products of the Microsoft Office suite, Microsoft<br />

Visual Basic for Applications, which is nearly identical to Visual Basic 6.0 (VB6). VBA code can be stored in<br />

modules and code behind forms and reports. Modules can also be classes.<br />

To manipulate data in tables and queries in VBA, two database access libraries of COM components are provided:<br />

the Data Access Objects (DAO), which is included in Access and Windows and evolved to ACE in Microsoft Access<br />

2007 for the ACCDE database format, and ActiveX Data Objects ActiveX Data Objects (ADO). Beside DAO and


Microsoft Access 5<br />

ADO, developers can also use OLE DB and ODBC for developing native C/C++ programs for Access. [7] For ADPs<br />

and the direct manipulation of SQL Server data, ADO is required. DAO is most appropriate for managing data in<br />

Access/Jet databases, and the only way to manipulate the complex field types in ACCDB tables.<br />

In the database container or navigation pane of Access 2007, Access automatically categorizes each object by type.<br />

Many Access developers use the Leszynski naming convention, though this is not universal; it is a programming<br />

convention, not a DB<strong>MS</strong>-enforced rule. [8] It is particularly helpful in VBA where references to object names may not<br />

indicate its data type (e.g. tbl for tables, qry for queries).<br />

Microsoft Access is most often used for individual and workgroup projects (the Access 97 speed characterization<br />

was done for 32 users). [9] Since Access 97, and with Access 2003 and 2007, Microsoft Access and hardware have<br />

evolved significantly. <strong>Database</strong>s under 1 GB in size (which can now fit entirely in RAM) and 50 simultaneous users<br />

are well within the capabilities of Microsoft Access. Of course, performance depends on the database design and<br />

tasks. Disk intensive work such as complex searching and querying are the most time consuming.<br />

As data from a Microsoft Access database can be cached in RAM, processing speed may be substantially better<br />

when there is only a single user or if the data is not changing. In the past, the effect of packet latency on the record<br />

locking system caused Access databases to be too slow on Virtual Private Network (VPN) or Wide Area Network<br />

(WAN) against a Jet database. This is less of an issue now with broadband connections. Performance can also be<br />

enhanced if a continuous connection [10] is maintained to the back end database throughout the session rather than<br />

opening and closing it for each table access. If Access <strong>Database</strong> performance over VPN or WAN suffers, then<br />

Microsoft Terminal Services is an effective solution. Access databases linked to SQL Server or Access Data Projects<br />

work great over VPN and WAN.<br />

Split <strong>Database</strong> Architecture<br />

Microsoft Access applications can adopt a split database architecture. The database can be divided into a front end<br />

database that contains the application objects (queries, forms, reports, macros, and modules), and is linked to tables<br />

stored in a back end shared database containing the data. The 'back-end' database can be stored in a location shared<br />

by many users, such as a file server. The 'front-end' database is distributed to each user's desktop and linked to the<br />

shared database. Using this design, each user has a copy of Microsoft Access installed on their machine along with<br />

their application database. This reduces network traffic since the application is not retrieved for each use, and allows<br />

the front end database to contain tables with data that is private to each user for storing settings or temporary data.<br />

This split database design also allows development of the application independent of the data. When a new version is<br />

ready, the front end database is replaced without impacting the data database. Microsoft Access has two built-in<br />

utilities, <strong>Database</strong> Splitter and Linked Table Manager, to facilitate this architecture.<br />

Linked tables in Access use absolute paths rather than relative paths, so the development environment either has to<br />

have the same path as the production environment or a "dynamic-linker" routine can be written in VBA.<br />

This is not an economical setup across slow networks, or large organizations separated by great distances, as this will<br />

result in excessive lag to database users. SQL backend should be considered in these circumstances.<br />

Access to SQL Server Upsizing (SQL as a backend)<br />

To scale Access applications to enterprise or web solutions, a recommended technique is to migrate to Microsoft<br />

SQL Server or equivalent server database. A client–server design significantly reduces maintenance and increases<br />

security, availability, stability, and transaction logging.<br />

Access includes an Upsizing Wizard that allows users to upsize their databases to Microsoft SQL Server an ODBC<br />

client–server database. An additional solution, the SQL Server Migration Assistant for Access (SSMA), is also<br />

available for download from Microsoft. [11]


Microsoft Access 6<br />

A variety of upsizing options are available. [12] After migrating the data and queries to SQL Server, the<br />

MDB/ACCDB Access database can be linked to the database. This is the easiest migration and most appropriate if<br />

the user does not have rights to create objects such as stored procedures on SQL Server. Retrieving data from linked<br />

tables is optimized to just the records needed, but are not as efficient for multi-table joins that may require copying<br />

the whole table across the network.<br />

Access databases can also be converted to an Access Data Projects (ADP) which is tied directly to one SQL Server<br />

database. ADPs support the ability to directly create and modify SQL Server objects such as tables, views, stored<br />

procedures, views, and SQL Server constraints. The views and stored procedures can significantly reduce the<br />

network traffic for multi-table joins. Unfortunately, ADPs do not support temporary tables or link to other data<br />

sources beyond the single SQL Server database. (MDB/ACCDB databases can link to a variety of data sources and<br />

let you perform heterogeneous queries across them).<br />

Finally, some Access databases are completely replaced by another solution such as ASP.NET or Java once the data<br />

is converted.<br />

In many cases, hybrid solutions are created where web interfaces are built by developers using ASP.NET, while<br />

administrative or reporting features that don't need to be distributed to everyone and/or change often, are kept in<br />

Access for information workers to maintain.<br />

While all Access data can migrate to SQL Server, some queries cannot migrate successfully. In some situations, you<br />

may need to translate VBA functions and user defined functions into TSQL or .NET functions / procedures. Crosstab<br />

queries can be migrated to SQL Server using the PIVOT command.<br />

Microsoft Access has a reputation among IT professionals as not being as economical on server resources when<br />

running large query transactions, especially if users force-terminate the application on the client side. Transactions<br />

that were running might still be running on the SQL server unbeknownst to the end user. [13]<br />

Protection<br />

Microsoft Access offers several ways to secure the application while allowing users to remain productive.<br />

The most basic is a database password. Once entered, the user has full control of all the database objects. This is a<br />

relatively weak form of protection which can be easily cracked.<br />

A higher level of protection is the use of workgroup security requiring a user name and password. Users and groups<br />

can be specified along with their rights at the object type or individual object level. This can be used to specify<br />

people with readonly or data entry rights but may be challenging to specify. A separate workgroup security file<br />

contains the settings which can be used to manage multiple databases. Workgroup security is not supported in the<br />

Access 2007 ACCDB database format, although Access 2007 still supports it for MDB databases.<br />

<strong>Database</strong>s can also be encrypted. The ACCDB format offers significantly advanced encryption from previous<br />

versions [14].<br />

Additionally, if the database design needs to be secured to prevent changes, Access databases can be<br />

locked/protected (and the source code compiled) by converting the database to a .MDE file. All changes to the VBA<br />

project (modules, forms, or reports) need to be made to the original MDB and then reconverted to MDE. In Access<br />

2007, the ACCDB database is converted to an ACCDE file. Some tools are available for unlocking and<br />

'decompiling', although certain elements including original VBA comments and formatting are normally<br />

irretrievable.


Microsoft Access 7<br />

File extensions<br />

Microsoft Access saves information under the following file formats:<br />

Versions<br />

Date Version Version<br />

File format Extension<br />

Access Project .adp<br />

Access Blank Project Template .adn<br />

Access <strong>Database</strong> (2007) .accdb<br />

Access <strong>Database</strong> Runtime (2007) .accdr<br />

Access <strong>Database</strong> Template (2007) .accdt<br />

Access <strong>Database</strong> (2003 and earlier) .mdb<br />

Access <strong>Database</strong>, used for addins (2,95,97), previously used for workgroups (2). .mda<br />

Access <strong>Database</strong> Template (2003 and earlier) .mdt<br />

Access Workgroup, database for user-level security. .mdw<br />

Access (SQL Server) detached database (2000) .mdf<br />

Protected Access <strong>Database</strong>, with compiled VBA (2003 and earlier) .mde<br />

Protected Access <strong>Database</strong>, with compiled VBA (2007) .accde<br />

Windows Shortcut: Access Macro .mam<br />

Windows Shortcut: Access Query .maq<br />

Windows Shortcut: Access Report .mar<br />

Windows Shortcut: Access Table .mat<br />

Windows Shortcut: Access Form .maf<br />

number<br />

1992 Access 1.1 1 Windows 3.0<br />

Supported OS Office suite version<br />

1993 Access 2.0 2.0 Windows 3.1x Office 4.3 Pro<br />

1995 Access for Windows<br />

95<br />

7.0 Windows 95 Office 95 Professional<br />

1997 Access 97 8.0 Windows 9x, NT 3.51/4.0 Office 97 Professional and Developer<br />

1999 Access 2000 9.0 Windows 9x, NT 4.0, 2000 Office 2000 Professional, Premium and Developer<br />

2001 Access 2002 10 Windows 98, Me, 2000, XP Office XP Professional and Developer<br />

2003 Access 2003 11 Windows 2000, XP, XP Professional x64,<br />

Vista<br />

2007 Access 2007 12 Windows XP SP2, XP Professional x64,<br />

Vista<br />

Office 2003 Professional and Professional Enterprise<br />

Office 2007 Professional, Professional Plus, Ultimate and<br />

Enterprise<br />

2010 Access 2010 14 Windows XP SP3, Vista, Windows 7 Office 2010 Professional, Professional Academic and<br />

Professional Plus<br />

There are no Access versions between 2.0 and 7.0 because the Windows 95 version was launched with Word 7. All<br />

of the Office 95 products have OLE 2 capabilities, and Access 7 shows that it was compatible with Word 7.


Microsoft Access 8<br />

Alternative software<br />

• Alpha Five (Windows)<br />

• Borland Paradox (Windows/DOS)<br />

• DataEase (Windows/DOS)<br />

• dBase (Windows/DOS/CPM/MacOS/UNIX/V<strong>MS</strong>)<br />

• FileMaker Pro (formerly Claris Filemaker) (Windows/MacOS/DOS)<br />

• Kexi (Linux/UNIX/Windows/Solaris/MacOS)<br />

• Lotus Approach (Windows)<br />

• NeoOffice (MacOS)<br />

• OpenOffice.org Base (Linux/Windows/MacOS/FreeBSD/UNIX)<br />

• Oracle XE (Express Edition) (Linux/Windows)<br />

• Sun StarBase (Windows/Linux/MacOS/Solaris)<br />

• Foxpro (later acquired by Microsoft)<br />

• SQLite<br />

• Sybase PowerBuilder (Windows)<br />

• MySQL (Many)<br />

• nuBuilder (Linux/Windows)<br />

• PostgreSQL<br />

• Omnis Studio (Linux/Windows/MacOS)<br />

• Microsoft SQL Server Express (Windows)<br />

External links<br />

• Access Team Blog [15]<br />

• Free online user guide to Microsoft Access [16]<br />

• Microsoft Access Home Page [17]<br />

• Office 2010 product guide [18]<br />

• Microsoft Access Newsgroups [19]<br />

• Microsoft Access 3rd Party Tools [20]<br />

• FAQ site about Microsoft Access [21]<br />

• Microsoft Access within an Organization's <strong>Database</strong> Strategy [22]<br />

• Microsoft Access Performance Tips [23]<br />

• Microsoft Access Error Numbers and Description Reference [24]<br />

• Microsoft Access for Beginners [25]<br />

• AccessBlog.net - Tips and tricks on Microsoft Access [26]<br />

• <strong>MS</strong> Access Tutorials and Examples [27]<br />

This article was originally based on material from the Free On-line Dictionary of Computing, which is licensed<br />

under the GFDL.


Microsoft Access 9<br />

References<br />

[1] http:/ / office. microsoft. com/ access<br />

[2] Microsoft Access History (http:/ / www. fmsinc. com/ MicrosoftAccess/ history/ index. html)<br />

[3] Where did the name for Microsoft Access come from? (http:/ / blogs. msdn. com/ oldnewthing/ archive/ 2006/ 04/ 13/ 575739. aspx)<br />

[4] http:/ / office. microsoft. com/ en-us/ templates/ default. aspx<br />

[5] http:/ / www. microsoft. com/ downloads/ details. aspx?FamilyID=d9ae78d9-9dc6-4b38-9fa6-2c745a175aed& DisplayLang=en<br />

[6] http:/ / www. microsoft. com/ downloads/ details. aspx?FamilyID=d96a8358-ece4-4bee-a844-f81856dceb67& DisplayLang=en<br />

[7] Aleksandar Jakšić (08 2008). "Developing Access 2007 Solutions with Native C or C++" (http:/ / msdn. microsoft. com/ en-us/ library/<br />

cc811599. aspx). Microsoft Corporation. . Retrieved 2008-09-22.<br />

[8] Naming Conventions for Microsoft Access (http:/ / msdn. microsoft. com/ archive/ default. asp?url=/ archive/ en-us/ dnaraccess/ html/<br />

msdn_20naming. asp)<br />

[9] Kevin Collins (Microsoft Jet Program Management), "Microsoft Jet 3.5 Performance Overview and Optimization Techniques", <strong>MS</strong>DN.<br />

Retrieved July 19, 2005.<br />

[10] http:/ / www. fmsinc. com/ MicrosoftAccess/ Performance/ Linked<strong>Database</strong>. html<br />

[11] http:/ / www. microsoft. com/ sqlserver/ 2005/ en/ us/ migration-access. aspx<br />

[12] http:/ / www. fmsinc. com/ F<strong>MS</strong>Upsize/ docs/ EvolvingMicrosoftAccessApplications. pdf<br />

[13] http:/ / support. microsoft. com/ kb/ 835416<br />

[14] http:/ / msdn. microsoft. com/ en-us/ library/ bb421308. aspx<br />

[15] http:/ / blogs. msdn. com/ access<br />

[16] http:/ / www. about-access-databases. com<br />

[17] http:/ / office. microsoft. com/ en-us/ access/ default. aspx<br />

[18] http:/ / www. microsoft. com/ downloads/ details. aspx?familyid=E690BAF0-9B9A-4C47-88DA-3A84F3E9B247& displaylang=en<br />

[19] http:/ / www. microsoft. com/ office/ community/ en-us/ default. mspx?dg=microsoft. public. access& lang=en& cr=US<br />

[20] http:/ / office. microsoft. com/ en-us/ marketplace/ CE010737481033. aspx<br />

[21] http:/ / www. mvps. org/ access<br />

[22] http:/ / www. fmsinc. com/ microsoftaccess/ Strategy/<br />

[23] http:/ / www. fmsinc. com/ microsoftaccess/ Performance. html<br />

[24] http:/ / www. fmsinc. com/ MicrosoftAccess/ Errors/ ErrorNumber_Description. html<br />

[25] http:/ / www. drewslair. com/ desk/ access/ beginners/ intro. shtml<br />

[26] http:/ / accessblog. net<br />

[27] http:/ / www. eraserve. com/ tutorials/


Microsoft SQL Server 10<br />

Microsoft SQL Server<br />

Developer(s) Microsoft<br />

Stable release SQL Server 2008 R2 (10.50.1600.1) / April 21, 2010<br />

Written in C, C++<br />

Operating system Microsoft Windows<br />

Available in Multi-lingual<br />

Development status Active<br />

Type RDB<strong>MS</strong><br />

License Microsoft EULA<br />

Website<br />

www.microsoft.com/sqlserver [1]<br />

Microsoft SQL Server is a relational model database server produced by Microsoft. Its primary query languages are<br />

T-SQL and ANSI SQL.<br />

History<br />

Genesis<br />

SQL Server Release History<br />

Version Year Release Name Codename<br />

1.0<br />

(OS/2)<br />

1.1<br />

(OS/2)<br />

4.21<br />

(WinNT)<br />

1989 SQL Server 1.0<br />

(16bit)<br />

1991 SQL Server 1.1<br />

(16bit)<br />

1993 SQL Server 4.21 SQLNT<br />

6.0 1995 SQL Server 6.0 SQL95<br />

6.5 1996 SQL Server 6.5 Hydra<br />

7.0 1998 SQL Server 7.0 Sphinx<br />

- 1999 SQL Server 7.0<br />

OLAP Tools<br />

-<br />

-<br />

Plato<br />

8.0 2000 SQL Server 2000 Shiloh<br />

8.0 2003 SQL Server 2000<br />

64-bit Edition<br />

Liberty<br />

9.0 2005 SQL Server 2005 Yukon<br />

10.0 2008 SQL Server 2008 Katmai<br />

10.5 2010 SQL Server 2008 R2 Kilimanjaro (aka KJ)


Microsoft SQL Server 11<br />

The code base for <strong>MS</strong> SQL Server (prior to version 7.0) originated in Sybase SQL Server, and was Microsoft's entry<br />

to the enterprise-level database market, competing against Oracle, IBM, and, later, Sybase. Microsoft, Sybase and<br />

Ashton-Tate originally teamed up to create and market the first version named SQL Server 1.0 for OS/2 (about 1989)<br />

which was essentially the same as Sybase SQL Server 3.0 on Unix, V<strong>MS</strong>, etc. Microsoft SQL Server 4.2 was<br />

shipped around 1992 (available bundled with Microsoft OS/2 version 1.3). Later Microsoft SQL Server 4.21 for<br />

Windows NT was released at the same time as Windows NT 3.1. Microsoft SQL Server v6.0 was the first version<br />

designed for NT, and did not include any direction from Sybase.<br />

About the time Windows NT was released, Sybase and Microsoft parted ways and each pursued their own design<br />

and marketing schemes. Microsoft negotiated exclusive rights to all versions of SQL Server written for Microsoft<br />

operating systems. Later, Sybase changed the name of its product to Adaptive Server Enterprise to avoid confusion<br />

with Microsoft SQL Server. Until 1994, Microsoft's SQL Server carried three Sybase copyright notices as an<br />

indication of its origin.<br />

Since parting ways, several revisions have been done independently. SQL Server 7.0 was a rewrite from the legacy<br />

Sybase code. It was succeeded by SQL Server 2000, which was the first edition to be launched in a variant for the<br />

IA-64 architecture.<br />

In the eight years since release of Microsoft's previous SQL Server product (SQL Server 2000), advancements have<br />

been made in performance, the client IDE tools, and several complementary systems that are packaged with SQL<br />

Server 2005. These include: an ETL tool (SQL Server Integration Services or SSIS), a Reporting Server, an OLAP<br />

and data mining server (Analysis Services), and several messaging technologies, specifically Service Broker and<br />

Notification Services.<br />

SQL Server 2005<br />

SQL Server 2005 (codenamed Yukon), released in October 2005, is the successor to SQL Server 2000. It included<br />

native support for managing XML data, in addition to relational data. For this purpose, it defined an xml data type<br />

that could be used either as a data type in database columns or as literals in queries. XML columns can be associated<br />

with XSD schemas; XML data being stored is verified against the schema. XML is converted to an internal binary<br />

data type before being stored in the database. Specialized indexing methods were made available for XML data.<br />

XML data is queried using XQuery;CLR Integration was the main features with this edition where one could write<br />

SQL code as Managed Code these are those code which are being executed by CLR(Common Language Runtime).<br />

SQL Server 2005 added some extensions to the T-SQL language to allow embedding XQuery queries in T-SQL. In<br />

addition, it also defines a new extension to XQuery, called XML DML, that allows query-based modifications to<br />

XML data. SQL Server 2005 also allows a database server to be exposed over web services using TDS packets<br />

encapsulated within SOAP (protocol) requests. When the data is accessed over web services, results are returned as<br />

XML. [2]<br />

For relational data, T-SQL has been augmented with error handling features (try/catch) and support for recursive<br />

queries (Common Table Expressions). SQL Server 2005 has also been enhanced with new indexing algorithms and<br />

better error recovery systems. Data pages are checksummed for better error resiliency, and optimistic concurrency<br />

support has been added for better performance. Permissions and access control have been made more granular and<br />

the query processor handles concurrent execution of queries in a more efficient way. Partitions on tables and indexes<br />

are supported natively, so scaling out a database onto a cluster is easier. SQL CLR was introduced with SQL Server<br />

2005 to let it integrate with the .NET Framework. [3]<br />

SQL Server 2005 introduced "MARS" (Multiple Active Results Sets), a method of allowing usage of database<br />

connections for multiple purposes. [4]


Microsoft SQL Server 12<br />

SQL Server 2008<br />

The current version of SQL Server, SQL Server 2008, [5] [6] was released (RTM) on August 6, 2008 [7] and aims to<br />

make data management self-tuning, self organizing, and self maintaining with the development of SQL Server<br />

Always On technologies, to provide near-zero downtime. SQL Server 2008 also includes support for structured and<br />

semi-structured data, including digital media formats for pictures, audio, video and other multimedia data. In current<br />

versions, such multimedia data can be stored as BLOBs (binary large objects), but they are generic bitstreams.<br />

Intrinsic awareness of multimedia data will allow specialized functions to be performed on them. According to Paul<br />

Flessner, senior Vice President, Server Applications, Microsoft Corp., SQL Server 2008 can be a data storage<br />

backend for different varieties of data: XML, email, time/calendar, file, document, spatial, etc as well as perform<br />

search, query, analysis, sharing, and synchronization across all data types. [6]<br />

Other new data types include specialized date and time types and a Spatial data type for location-dependent data. [8]<br />

Better support for unstructured and semi-structured data is provided using the new FILE STREAM [9] data type,<br />

which can be used to reference any file stored on the file system. [10] Structured data and metadata about the file is<br />

stored in SQL Server database, whereas the unstructured component is stored in the file system. Such files can be<br />

accessed both via Win32 file handling APIs as well as via SQL Server using T-SQL; doing the latter accesses the file<br />

data as a BLOB. Backing up and restoring the database backs up or restores the referenced files as well. [11] SQL<br />

Server 2008 also natively supports hierarchical data, and includes T-SQL constructs to directly deal with them,<br />

without using recursive queries. [11]<br />

The Full-Text Search functionality has been integrated with the database engine, which simplifies management and<br />

improves performance. [12]<br />

Spatial data will be stored in two types. A "Flat Earth" (GEOMETRY or planar) data type represents geospatial data<br />

which has been projected from its native, spherical, coordinate system into a plane. A "Round Earth" data type<br />

(GEOGRAPHY) uses an ellipsoidal model in which the Earth is defined as a single continuous entity which does not<br />

suffer from the singularities such as the international dateline, poles, or map projection zone "edges". Approximately<br />

70 methods are available to represent spatial operations for the Open Geospatial Consortium Simple Features for<br />

SQL, Version 1.1. [13]<br />

SQL Server includes better compression features, which also helps in improving scalability. It also includes<br />

Resource Governor that allows reserving resources for certain users or workflows. It also includes capabilities for<br />

transparent encryption of data as well as compression of backups. [9] SQL Server 2008 supports the ADO.NET Entity<br />

Framework and the reporting tools, replication, and data definition will be built around the Entity Data Model. [14]<br />

SQL Server Reporting Services will gain charting capabilities from the integration of the data visualization products<br />

from Dundas Data Visualization Inc., which was acquired by Microsoft. [15] On the management side, SQL Server<br />

2008 includes the Declarative Management Framework which allows configuring policies and constraints, on the<br />

entire database or certain tables, declaratively. [8] The version of SQL Server Management Studio included with SQL<br />

Server 2008 supports IntelliSense for SQL queries against a SQL Server 2008 <strong>Database</strong> Engine. [16] SQL Server 2008<br />

also makes the databases available via Windows PowerShell providers and management functionality available as<br />

Cmdlets, so that the server and all the running instances can be managed from Windows PowerShell. [17]


Microsoft SQL Server 13<br />

SQL Server 2008 R2<br />

SQL Server 2008 R2 (formerly codenamed SQL Server "Kilimanjaro") was announced at TechEd 2009, and was<br />

released to manufacturing on April 21, 2010. [18] SQL Server 2008 R2 adds certain features to SQL Server 2008<br />

including master data management system branded as Master Data Services, a centralized console to manage<br />

multiple SQL Server instances, and support for more than 64 logical processors. [19]<br />

SQL Server 2008 R2 boasts a number of new services, [20] including PowerPivot for Excel and SharePoint, Master<br />

Data Services, StreamInsight, ReportBuilder 3.0, Reporting Services Add-in for SharePoint, a Data-tier function in<br />

Visual Studio that enables packaging of tiered databases as part of an application, and a SQL Server Utility that<br />

manages multiple SQL Servers.<br />

Editions<br />

Microsoft makes SQL Server available in multiple editions, with different feature sets and targeting different users.<br />

[21] [22]<br />

These editions are:<br />

SQL Server Compact Edition (SQL CE)<br />

The compact edition is an embedded database engine. Unlike the other editions of SQL Server, the SQL CE<br />

engine is based on SQL Mobile (initially designed for use with hand-held devices) and does not share the same<br />

binaries. Due to its small size (1MB DLL footprint), it has a markedly reduced feature set compared to the<br />

other editions. For example, it supports a subset of the standard data types, does not support stored procedures<br />

or <strong>View</strong>s or multiple-statement batches (among other limitations). It is limited to 4GB maximum database size<br />

and cannot be run as a Windows service, Compact Edition must be hosted by the application using it. The 3.5<br />

version includes considerable work that supports ADO.NET Synchronization Services.<br />

SQL Server Datacenter Edition<br />

SQL Server Developer Edition<br />

SQL Server Developer Edition includes the same features as SQL Server Enterprise Edition, but is limited by<br />

the license to be only used as a development and test system, and not as production server. This edition is<br />

available to download by students free of charge as a part of Microsoft's DreamSpark program.<br />

SQL Server 2005 Embedded Edition (SSEE)<br />

SQL Server 2005 Embedded Edition is a specially configured named instance of the SQL Server Express<br />

database engine which can be accessed only by certain Windows Services.<br />

SQL Server Enterprise Edition<br />

SQL Server Enterprise Edition is the full-featured edition of SQL Server, including both the core database<br />

engine and add-on services, while including a range of tools for creating and managing a SQL Server cluster.<br />

SQL Server Evaluation Edition<br />

SQL Server Evaluation Edition, also known as the Trial Edition, has all the features of the Enterprise Edition,<br />

but is limited to 180 days, after which the tools will continue to run, but the server services will stop. [23]<br />

SQL Server Express Edition<br />

SQL Server Express Edition is a scaled down, free edition of SQL Server, which includes the core database<br />

engine. While there are no limitations on the number of databases or users supported, it is limited to using one<br />

processor, 1 GB memory and 4 GB database files (10 GB database files from SQL Server Express 2008 R2 [24]<br />

). The entire database is stored in a single .mdf file, and thus making it suitable for XCOPY deployment. It is<br />

intended as a replacement for <strong>MS</strong>DE. Two additional editions provide a superset of features not in the original<br />

Express Edition. The first is SQL Server Express with Tools, which includes SQL Server Management<br />

Studio Basic. SQL Server Express with Advanced Services adds full-text search capability and reporting<br />

services. [25]


Microsoft SQL Server 14<br />

SQL Server Fast Track<br />

SQL Server Fast Track is specifically for enterprise-scale data warehousing storage and business intelligence<br />

processing, and runs on reference-architecture hardware that is optimized for Fast Track. [26]<br />

SQL Server Standard Edition<br />

SQL Server Standard edition includes the core database engine, along with the stand-alone services. It differs<br />

from Enterprise edition in that it supports fewer active instances (number of nodes in a cluster) and does not<br />

include some high-availability functions such as hot-add memory (allowing memory to be added while the<br />

server is still running), and parallel indexes.<br />

SQL Server Web Edition<br />

SQL Server Web Edition is a low-TCO option for Web hosting.<br />

SQL Server Workgroup Edition<br />

SQL Server Workgroup Edition includes the core database functionality but does not include the additional<br />

services.<br />

Architecture<br />

Protocol layer<br />

Protocol layer implements the external interface to SQL Server. All operations that can be invoked on SQL Server<br />

are communicated to it via a Microsoft-defined format, called Tabular Data Stream (TDS). TDS is an application<br />

layer protocol, used to transfer data between a database server and a client. Initially designed and developed by<br />

Sybase Inc. for their Sybase SQL Server relational database engine in 1984, and later by Microsoft in Microsoft SQL<br />

Server, TDS packets can be encased in other physical transport dependent protocols, including TCP/IP, Named<br />

pipes, and Shared memory. Consequently, access to SQL Server is available over these protocols. In addition, the<br />

SQL Server API is also exposed over web services. [22]<br />

Data storage<br />

The main unit of data storage is a database, which is a collection of tables with typed columns. SQL Server supports<br />

different data types, including primary types such as Integer, Float, Decimal, Char (including character strings),<br />

Varchar (variable length character strings), binary (for unstructured blobs of data), Text (for textual data) among<br />

others. The rounding of floats to integers uses either Symmetric Arithmetic Rounding or Symmetric Round Down<br />

(Fix) depending on arguments: SELECT Round(2.5, 0) gives 3.<br />

Microsoft SQL Server also allows user-defined composite types (UDTs) to be defined and used. It also makes server<br />

statistics available as virtual tables and views (called Dynamic Management <strong>View</strong>s or DMVs). In addition to tables,<br />

a database can also contain other objects including views, stored procedures, indexes and constraints, along with a<br />

transaction log. A SQL Server database can contain a maximum of 2 31 objects, and can span multiple OS-level files<br />

with a maximum file size of 2 20 TB. [22] The data in the database are stored in primary data files with an extension<br />

.mdf. Secondary data files, identified with an .ndf extension, are used to store optional metadata. Log files are<br />

identified with the .ldf extension. [22]<br />

Storage space allocated to a database is divided into sequentially numbered pages, each 8 KB in size. A page is the<br />

basic unit of I/O for SQL Server operations. A page is marked with a 96-byte header which stores metadata about the<br />

page including the page number, page type, free space on the page and the ID of the object that owns it. Page type<br />

defines the data contained in the page - data stored in the database, index, allocation map which holds information<br />

about how pages are allocated to tables and indexes, change map which holds information about the changes made to<br />

other pages since last backup or logging, or contain large data types such as image or text. While page is the basic<br />

unit of an I/O operation, space is actually managed in terms of an extent which consists of 8 pages. A database object


Microsoft SQL Server 15<br />

can either span all 8 pages in an extent ("uniform extent") or share an extent with up to 7 more objects ("mixed<br />

extent"). A row in a database table cannot span more than one page, so is limited to 8 KB in size. However, if the<br />

data exceeds 8 KB and the row contains Varchar or Varbinary data, the data in those columns are moved to a new<br />

page (or possibly a sequence of pages, called an Allocation unit) and replaced with a pointer to the data. [27]<br />

For physical storage of a table, its rows are divided into a series of partitions (numbered 1 to n). The partition size is<br />

user defined; by default all rows are in a single partition. A table is split into multiple partitions in order to spread a<br />

database over a cluster. Rows in each partition are stored in either B-tree or heap structure. If the table has an<br />

associated index to allow fast retrieval of rows, the rows are stored in-order according to their index values, with a<br />

B-tree providing the index. The data is in the leaf node of the leaves, and other nodes storing the index values for the<br />

leaf data reachable from the respective nodes. If the index is non-clustered, the rows are not sorted according to the<br />

index keys. An indexed view has the same storage structure as an indexed table. A table without an index is stored in<br />

an unordered heap structure. Both heaps and B-trees can span multiple allocation units. [28]<br />

Buffer management<br />

SQL Server buffers pages in RAM to minimize disc I/O. Any 8 KB page can be buffered in-memory, and the set of<br />

all pages currently buffered is called the buffer cache. The amount of memory available to SQL Server decides how<br />

many pages will be cached in memory. The buffer cache is managed by the Buffer Manager. Either reading from or<br />

writing to any page copies it to the buffer cache. Subsequent reads or writes are redirected to the in-memory copy,<br />

rather than the on-disc version. The page is updated on the disc by the Buffer Manager only if the in-memory cache<br />

has not been referenced for some time. While writing pages back to disc, asynchronous I/O is used whereby the I/O<br />

operation is done in a background thread so that other operations do not have to wait for the I/O operation to<br />

complete. Each page is written along with its checksum when it is written. When reading the page back, its<br />

checksum is computed again and matched with the stored version to ensure the page has not been damaged or<br />

tampered with in the meantime. [29]<br />

Logging and Transaction<br />

SQL Server ensures that any change to the data is ACID-compliant, i.e., it uses transactions to ensure that any<br />

operation either totally completes or is undone if fails, but never leaves the database in an intermediate state. Using<br />

transactions, a sequence of actions can be grouped together, with the guarantee that either all actions will succeed or<br />

none will. SQL Server implements transactions using a write-ahead log. Any changes made to any page will update<br />

the in-memory cache of the page, simultaneously all the operations performed will be written to a log, along with the<br />

transaction ID which the operation was a part of. Each log entry is identified by an increasing Log Sequence Number<br />

(LSN) which ensure that no event overwrites another. SQL Server ensures that the log will be written onto the disc<br />

before the actual page is written back. This enables SQL Server to ensure integrity of the data, even if the system<br />

fails. If both the log and the page were written before the failure, the entire data is on persistent storage and integrity<br />

is ensured. If only the log was written (the page was either not written or not written completely), then the actions<br />

can be read from the log and repeated to restore integrity. If the log wasn't written then integrity is also maintained<br />

although the database state remains unchanged as if the transaction never occurred. If it was only partially written,<br />

then the actions associated with the unfinished transaction are discarded. Since the log was only partially written, the<br />

page is guaranteed to have not been written, again ensuring data integrity. Removing the unfinished log entries<br />

effectively undoes the transaction. SQL Server ensures consistency between the log and the data every time an<br />

instance is restarted. [22]


Microsoft SQL Server 16<br />

Concurrency and locking<br />

SQL Server allows multiple clients to use the same database concurrently. As such, it needs to control concurrent<br />

access to shared data, to ensure data integrity - when multiple clients update the same data, or clients attempt to read<br />

data that is in the process of being changed by another client. SQL Server provides two modes of concurrency<br />

control: pessimistic concurrency and optimistic concurrency. When pessimistic concurrency control is being used,<br />

SQL Server controls concurrent access by using locks. Locks can be either shared or exclusive. Exclusive lock grants<br />

the user exclusive access to the data - no other user can access the data as long as the lock is held. Shared locks are<br />

used when some data is being read - multiple users can read from data locked with a shared lock, but not acquire an<br />

exclusive lock. The latter would have to wait for all shared locks to be released. Locks can be applied on different<br />

levels of granularity - on entire tables, pages, or even on a per-row basis on tables. For indexes, it can either be on<br />

the entire index or on index leaves. The level of granularity to be used is defined on a per-database basis by the<br />

database administrator. While a fine grained locking system allows more users to use the table or index<br />

simultaneously, it requires more resources. So it does not automatically turn into higher performing solution. SQL<br />

Server also includes two more lightweight mutual exclusion solutions - latches and spinlocks - which are less robust<br />

than locks but are less resource intensive. SQL Server uses them for DMVs and other resources that are usually not<br />

busy. SQL Server also monitors all worker threads that acquire locks to ensure that they do not end up in deadlocks -<br />

in case they do, SQL Server takes remedial measures, which in many cases is to kill one of the threads entangled in a<br />

deadlock and rollback the transaction it started. [22] To implement locking, SQL Server contains the Lock Manager.<br />

The Lock Manager maintains an in-memory table that manages the database objects and locks, if any, on them along<br />

with other metadata about the lock. Access to any shared object is mediated by the lock manager, which either grants<br />

access to the resource or blocks it.<br />

SQL Server also provides the optimistic concurrency control mechanism, which is similar to the multiversion<br />

concurrency control used in other databases. The mechanism allows a new version of a row to be created whenever<br />

the row is updated, as opposed to overwriting the row, i.e., a row is additionally identified by the ID of the<br />

transaction that created the version of the row. Both the old as well as the new versions of the row are stored and<br />

maintained, though the old versions are moved out of the database into a system database identified as Tempdb.<br />

When a row is in the process of being updated, any other requests are not blocked (unlike locking) but are executed<br />

on the older version of the row. If the other request is an update statement, it will result in two different versions of<br />

the rows - both of them will be stored by the database, identified by their respective transaction IDs. [22]<br />

Data retrieval<br />

The main mode of retrieving data from an SQL Server database is querying for it. The query is expressed using a<br />

variant of SQL called T-SQL, a dialect Microsoft SQL Server shares with Sybase SQL Server due to its legacy. The<br />

query declaratively specifies what is to be retrieved. It is processed by the query processor, which figures out the<br />

sequence of steps that will be necessary to retrieve the requested data. The sequence of actions necessary to execute a<br />

query is called a query plan. There might be multiple ways to process the same query. For example, for a query that<br />

contains a join statement and a select statement, executing join on both the tables and then executing select on the<br />

results would give the same result as selecting from each table and then executing the join, but result in different<br />

execution plans. In such case, SQL Server chooses the plan that is supposed to yield the results in the shortest<br />

possible time. This is called query optimization and is performed by the query processor itself. [22]<br />

SQL Server includes a cost-based query optimizer which tries to optimize on the cost, in terms of the resources it<br />

will take to execute the query. Given a query, the query optimizer looks at the database schema, the database<br />

statistics and the system load at that time. It then decides which sequence to access the tables referred in the query,<br />

which sequence to execute the operations and what access method to be used to access the tables. For example, if the<br />

table has an associated index, whether the index should be used or not - if the index is on a column which is not<br />

unique for most of the columns (low "selectivity"), it might not be worthwhile to use the index to access the data.


Microsoft SQL Server 17<br />

Finally, it decides whether to execute the query concurrently or not. While a concurrent execution is more costly in<br />

terms of total processor time, because the execution is actually split to different processors might mean it will<br />

execute faster. Once a query plan is generated for a query, it is temporarily cached. For further invocations of the<br />

[22] [30]<br />

same query, the cached plan is used. Unused plans are discarded after some time.<br />

SQL Server also allows stored procedures to be defined. Stored procedures are parameterized T-SQL queries, that<br />

are stored in the server itself (and not issued by the client application as is the case with general queries). Stored<br />

procedures can accept values sent by the client as input parameters, and send back results as output parameters. They<br />

can call defined functions, and other stored procedures, including the same stored procedure (up to a set number of<br />

times). They can be selectively provided access to. Unlike other queries, stored procedures have an associated name,<br />

which is used at runtime to resolve into the actual queries. Also because the code need not be sent from the client<br />

every time (as it can be accessed by name), it reduces network traffic and somewhat improves performance. [31]<br />

Execution plans for stored procedures are also cached as necessary.<br />

SQL CLR<br />

Microsoft SQL Server 2005 includes a component named SQL CLR ("Common Language Runtime") via which it<br />

integrates with .NET Framework. Unlike most other applications that use .NET Framework, SQL Server itself hosts<br />

the .NET Framework runtime, i.e., memory, threading and resource management requirements of .NET Framework<br />

are satisfied by SQLOS itself, rather than the underlying Windows operating system. SQLOS provides deadlock<br />

detection and resolution services for .NET code as well. With SQL CLR, stored procedures and triggers can be<br />

written in any managed .NET language, including C# and VB.NET. Managed code can also be used to define UDT's<br />

(user defined types), which can persist in the database. Managed code is compiled to .NET assemblies and after<br />

being verified for type safety, registered at the database. After that, they can be invoked like any other procedure. [32]<br />

However, only a subset of the Base Class Library is available, when running code under SQL CLR. Most APIs<br />

relating to user interface functionality are not available. [32]<br />

When writing code for SQL CLR, data stored in SQL Server databases can be accessed using the ADO.NET APIs<br />

like any other managed application that accesses SQL Server data. However, doing that creates a new database<br />

session, different from the one in which the code is executing. To avoid this, SQL Server provides some<br />

enhancements to the ADO.NET provider that allows the connection to be redirected to the same session which<br />

already hosts the running code. Such connections are called context connections and are set by setting context<br />

connection parameter to true in the connection string. SQL Server also provides several other enhancements to the<br />

ADO.NET API, including classes to work with tabular data or a single row of data as well as classes to work with<br />

internal metadata about the data stored in the database. It also provides access to the XML features in SQL Server,<br />

including XQuery support. These enhancements are also available in T-SQL Procedures in consequence of the<br />

introduction of the new XML Datatype (query,value,nodes functions). [33]<br />

Services<br />

SQL Server also includes an assortment of add-on services. While these are not essential for the operation of the<br />

database system, they provide value added services on top of the core database management system. These services<br />

either run as a part of some SQL Server component or out-of-process as Windows Service and presents their own<br />

API to control and interact with them.<br />

Service Broker<br />

Used inside an instance, it is used to provide an asynchronous programming environment. For cross instance<br />

applications, Service Broker communicates The Service Broker, which runs as a part of the database engine,<br />

provides a reliable messaging and message queuing platform for SQL Server applications. over TCP/IP and allows<br />

the different components to be synchronized together, via exchange of messages. [34]


Microsoft SQL Server 18<br />

Replication Services<br />

SQL Server Replication Services are used by SQL Server to replicate and synchronize database objects, either in<br />

entirety or a subset of the objects present, across replication agents, which might be other database servers across the<br />

network, or database caches on the client side. Replication follows a publisher/subscriber model, i.e., the changes are<br />

sent out by one database server ("publisher") and are received by others ("subscribers"). SQL Server supports three<br />

different types of replication: [35]<br />

Transaction replication<br />

Each transaction made to the publisher database (master database) is synced out to subscribers, who update<br />

their databases with the transaction. Transactional replication synchronizes databases in near real time. [36]<br />

Merge replication<br />

Changes made at both the publisher and subscriber databases are tracked, and periodically the changes are<br />

synchronized bi-directionally between the publisher and the subscribers. If the same data has been modified<br />

differently in both the publisher and the subscriber databases, synchronization will result in a conflict which<br />

has to be resolved - either manually or by using pre-defined policies. rowguid needs to be configured on a<br />

column if merge replication is configured. [37]<br />

Snapshot replication<br />

Snapshot replication published a copy of the entire database (the then-snapshot of the data) and replicates out<br />

to the subscribers. Further changes to the snapshot are not tracked. [38]<br />

Analysis Services<br />

SQL Server Analysis Services adds OLAP and data mining capabilities for SQL Server databases. The OLAP engine<br />

supports MOLAP, ROLAP and HOLAP storage modes for data. Analysis Services supports the XML for Analysis<br />

standard as the underlying communication protocol. The cube data can be accessed using MDX queries. [39] Data<br />

mining specific functionality is exposed via the DMX query language. Analysis Services includes various algorithms<br />

- Decision trees, clustering algorithm, Naive Bayes algorithm, time series analysis, sequence clustering algorithm,<br />

linear and logistic regression analysis, and neural networks - for use in data mining. [40]<br />

Reporting Services<br />

SQL Server Reporting Services is a report generation environment for data gathered from SQL Server databases. It<br />

is administered via a web interface. Reporting services features a web services interface to support the development<br />

of custom reporting applications. Reports are created as RDL files. [41]<br />

Reports can be designed using recent versions of Microsoft Visual Studio (Visual Studio.NET 2003, 2005, and<br />

2008) [42] with Business Intelligence Development Studio, installed or with the included Report Builder. Once<br />

created, RDL files can be rendered in a variety of formats [43] including Excel, PDF, CSV, XML, TIFF (and other<br />

image formats), [44] and HTML Web Archive.<br />

Notification Services<br />

Originally introduced as a post-release add-on for SQL Server 2000, [45] Notification Services was bundled as part of<br />

the Microsoft SQL Server platform for the first and only time with SQL Server 2005. [46] [47] with Sql Server 2005,<br />

SQL Server Notification Services is a mechanism for generating data-driven notifications, which are sent to<br />

Notification Services subscribers. A subscriber registers for a specific event or transaction (which is registered on the<br />

database server as a trigger); when the event occurs, Notification Services can use one of three methods to send a<br />

message to the subscriber informing about the occurrence of the event. These methods include SMTP, SOAP, or by<br />

writing to a file in the filesystem. [48] Notification Services was discontinued by Microsoft with the release of SQL<br />

Server 2008 in August 2008, and is no longer an officially supported component of the SQL Server database


Microsoft SQL Server 19<br />

platform.<br />

Integration Services<br />

SQL Server Integration Services is used to integrate data from different data sources. It is used for the ETL<br />

capabilities for SQL Server for data warehousing needs. Integration Services includes GUI tools to build data<br />

extraction workflows integration various functionality such as extracting data from various sources, querying data,<br />

transforming data including aggregating, duplication and merging data, and then loading the transformed data onto<br />

other sources, or sending e-mails detailing the status of the operation as defined by the user. [49]<br />

Full Text Search Service<br />

SQL Server Full Text Search service is a specialized<br />

indexing and querying service for unstructured text<br />

stored in SQL Server databases. The full text search<br />

index can be created on any column with character<br />

based text data. It allows for words to be searched for<br />

in the text columns. While it can be performed with the<br />

SQL LIKE operator, using SQL Server Full Text<br />

Search service can be more efficient. Full Text Search<br />

(FTS) allows for inexact matching of the source string,<br />

indicated by a Rank value which can range from 0 to<br />

1000 - a higher rank means a more accurate match. It<br />

also allows linguistic matching ("inflectional search"),<br />

i.e., linguistic variants of a word (such as a verb in a<br />

different tense) will also be a match for a given word<br />

(but with a lower rank than an exact match). Proximity<br />

The SQL Server Full Text Search service architecture<br />

searches are also supported, i.e., if the words searched for do not occur in the sequence they are specified in the<br />

query but are near each other, they are also considered a match. T-SQL exposes special operators that can be used to<br />

[50] [51]<br />

access the FTS capabilities.<br />

The Full Text Search engine is divided into two processes - the Filter Daemon process (msftefd.exe) and the Search<br />

process (msftesql.exe). These processes interact with the SQL Server. The Search process includes the indexer (that<br />

creates the full text indexes) and the full text query processor. The indexer scans through text columns in the<br />

database. It can also index through binary columns, and use iFilters to extract meaningful text from the binary blob<br />

(for example, when a Microsoft Word document is stored as an unstructured binary file in a database). The iFilters<br />

are hosted by the Filter Daemon process. Once the text is extracted, the Filter Daemon process breaks it up into a<br />

sequence of words and hands it over to the indexer. The indexer filters out noise words, i.e., words like A, And etc,<br />

which occur frequently and are not useful for search. With the remaining words, an inverted index is created,<br />

associating each word with the columns they were found in. SQL Server itself includes a Gatherer component that<br />

monitors changes to tables and invokes the indexer in case of updates. [52]<br />

When a full text query is received by the SQL Server query processor, it is handed over to the FTS query processor<br />

in the Search process. The FTS query processor breaks up the query into the constituent words, filters out the noise<br />

words, and uses an inbuilt thesaurus to find out the linguistic variants for each word. The words are then queried<br />

against the inverted index and a rank of their accurateness is computed. The results are returned to the client via the<br />

SQL Server process. [52]


Microsoft SQL Server 20<br />

Tools<br />

SQLCMD<br />

SQLCMD is a command line application that comes with Microsoft SQL Server, and exposes the management<br />

features of SQL Server. It allows SQL queries to be written and executed from the command prompt. It can also act<br />

as a scripting language to create and run a set of SQL statements as a script. Such scripts are stored as a .sql file, and<br />

are used either for management of databases or to create the database schema during the deployment of a database.<br />

SQLCMD was introduced with SQL Server 2005 and this continues with SQL Server 2008. Its predecessor for<br />

earlier versions was OSQL, which is functionally equivalent and many of the command line parameters are identical.<br />

Visual Studio<br />

Microsoft Visual Studio includes native support for data programming with Microsoft SQL Server. It can be used<br />

to write and debug code to be executed by SQL CLR. It also includes a data designer that can be used to graphically<br />

create, view or edit database schemas. Queries can be created either visually or using code. SS<strong>MS</strong> 2008 onwards,<br />

provides intellisense for SQL queries as well.<br />

SQL Server Management Studio<br />

SQL Server Management Studio is a GUI tool included with SQL Server 2005 and later for configuring,<br />

managing, and administering all components within Microsoft SQL Server. The tool includes both script editors and<br />

graphical tools that work with objects and features of the server. [53] SQL Server Management Studio replaces<br />

Enterprise Manager as the primary management interface for Microsoft SQL Server since SQL Server 2005. A<br />

version of SQL Server Management Studio is also available for SQL Server Express Edition, for which it is known<br />

as SQL Server Management Studio Express (SS<strong>MS</strong>E). [54]<br />

A central feature of SQL Server Management Studio is the Object Explorer, which allows the user to browse, select,<br />

and act upon any of the objects within the server. [55] It can be used to visually observe and analyze query plans and<br />

optimize the database performance, among others. [56] SQL Server Management Studio can also be used to create a<br />

new database, alter any existing database schema by adding or modifying tables and indexes, or analyze<br />

performance. It includes the query windows which provide a GUI based interface to write and execute queries. [22]<br />

Business Intelligence Development Studio<br />

Business Intelligence Development Studio (BIDS) is the IDE from Microsoft used for developing data analysis and<br />

Business Intelligence solutions utilizing the Microsoft SQL Server Analysis Services, Reporting Services and<br />

Integration Services. It is based on the Microsoft Visual Studio development environment but customizes with the<br />

SQL Server services-specific extensions and project types, including tools, controls and projects for reports (using<br />

Reporting Services), Cubes and data mining structures (using Analysis Services). [57]<br />

Programmability<br />

T-SQL<br />

T-SQL (Transact-SQL) is the primary means of programming and managing SQL Server. It exposes keywords for<br />

the operations that can be performed on SQL Server, including creating and altering database schemas, entering and<br />

editing data in the database as well as monitoring and managing the server itself. Client applications, both which<br />

consume data or manage the server, leverage SQL Server functionality by sending T-SQL queries and statements<br />

which are then processed by the server and results (or errors) returned to the client application. SQL Server allows it<br />

to be managed using T-SQL. For this it exposes read only tables from which server statistics can be read.


Microsoft SQL Server 21<br />

Management functionality is exposed via system-defined stored procedures which can be invoked from T-SQL<br />

queries to perform the management operation. It is also possible to create linked Server using T-SQL. Linked server<br />

allows operation to multiple server as one query. [58]<br />

SQL Native Client<br />

SQL Native Client is the native client side data access library for Microsoft SQL Server, version 2005 onwards. It<br />

natively implements support for the SQL Server features including the Tabular Data Stream implementation, support<br />

for mirrored SQL Server databases, full support for all data types supported by SQL Server, asynchronous<br />

operations, query notifications, encryption support, as well as receiving multiple result sets in a single database<br />

session. SQL Native Client is used under the hood by SQL Server plug-ins for other data access technologies,<br />

including ADO or OLE DB. The SQL Native Client can also be directly used, bypassing the generic data access<br />

layers. [59]<br />

See also<br />

• Comparison of relational database management systems<br />

• List of object-relational database management systems<br />

• <strong>Database</strong> management system<br />

• List of relational database management systems<br />

References<br />

[1] http:/ / www. microsoft. com/ sqlserver<br />

[2] "<strong>Database</strong> Engine XML Enhancements" (http:/ / msdn. microsoft. com/ en-us/ library/ ms170809. aspx). . Retrieved 2007-12-03.<br />

[3] "<strong>Database</strong> Engine Enhancements" (http:/ / msdn. microsoft. com/ en-us/ library/ ms170910. aspx). . Retrieved 2007-12-03.<br />

[4] Multiple Active Result Sets (MARS) in SQL Server 2005 (http:/ / msdn. microsoft. com/ en-us/ library/ ms345109(SQL. 90). aspx) (retrieved<br />

June 20, 2009)<br />

[5] "Microsoft SQL Server 2008" (http:/ / www. microsoft. com/ sql/ prodinfo/ futureversion/ default. mspx). . Retrieved 2007-04-06.<br />

[6] "ChannelWeb: Next SQL Server stop: Katmai" (http:/ / www. crn. com/ storage/ 170702999). . Retrieved 2005-11-05.<br />

[7] Announced to the SQL Server Special Interest Group at the ESRI 2008 User's Conference on August 6, 2008 by Ed Katibah (Spatial Program<br />

Manager at Microsoft)<br />

[8] "Microsoft Gives Peek At Next Version Of SQL Server" (http:/ / www. informationweek. com/ software/ showArticle.<br />

jhtml?articleID=199500164& subSection=Development). . Retrieved 2007-05-11.<br />

[9] "One more test build to go for SQL Server 2008" (http:/ / blogs. zdnet. com/ microsoft/ ?p=937). . Retrieved 2006-11-13.<br />

[10] "Guest Blogger: Ted Kummert" (http:/ / blogs. msdn. com/ stevengu/ archive/ 2007/ 11/ 13/ guest-blogger-ted-kummert. aspx). . Retrieved<br />

2007-11-20.<br />

[11] Christian Kleinerman. "SQL Server 2008 for developers" (http:/ / channel9. msdn. com/ Showpost. aspx?postid=387069). Channel9. .<br />

Retrieved 2008-03-07.<br />

[12] Fernando Azpeitia Lopez. "SQL Server 2008 Full-Text Search: Internals and Enhancements" (http:/ / msdn. microsoft. com/ en-us/ library/<br />

cc721269. aspx). .<br />

[13] "Microsoft Shares Details on SQL Server 2008 Spatial Support by Directions Staff" (http:/ / www. directionsmag. com/ editorials.<br />

php?article_id=2477& trv=1). . Retrieved 2007-09-07.<br />

[14] "SQL Server "Katmai" to Deliver Entity Data Platform and Support LINQ" (http:/ / oakleafblog. blogspot. com/ 2007/ 05/<br />

sql-server-to-deliver-entity-data. html). . Retrieved 2007-05-12.<br />

[15] "Microsoft Details Dynamic IT Strategy at Tech-Ed 2007" (http:/ / www. earthtimes. org/ articles/ show/ news_press_release,115898.<br />

shtml). . Retrieved 2007-06-04.<br />

[16] "SQL Server IntelliSense" (http:/ / msdn. microsoft. com/ en-us/ library/ ms173434. aspx). . Retrieved 2008-08-18.<br />

[17] "SQL Server Support for PowerShell!" (http:/ / blogs. msdn. com/ powershell/ archive/ 2007/ 11/ 13/ sql-server-support-for-powershell.<br />

aspx). . Retrieved 2007-12-03.<br />

[18] "SQL SQL Server 2008 R2 Launches!" (http:/ / blogs. technet. com/ sqlserverexperts/ archive/ 2010/ 04/ 21/ sql-server-2008-r2-launches.<br />

aspx). . Retrieved 2010-04-21.<br />

[19] SQL Server Team. "TechEd 2009 – new SQL Server Innovations" (http:/ / blogs. technet. com/ dataplatforminsider/ archive/ 2009/ 05/ 11/<br />

teched-2009-new-sql-server-innovations. aspx). <strong>MS</strong>DN Blogs. . Retrieved 2009-05-12.<br />

[20] networkworld.com (http:/ / www. networkworld. com/ reviews/ 2010/ 050310-microsoft-sql-server-2008-test. html?ap1=rcb)


Microsoft SQL Server 22<br />

[21] "SQL Server 2005 Features Comparison" (http:/ / www. microsoft. com/ sql/ prodinfo/ features/ compare-features. mspx). . Retrieved<br />

2007-12-03.<br />

[22] Kalen Delaney. Inside Microsoft SQL Server 2005: The Storage Engine. Microsoft Press. ISBN 0-7356-2105-5.<br />

[23] "SQL Server 2008 Trial <strong>Software</strong>" (http:/ / www. microsoft. com/ sqlserver/ 2008/ en/ us/ trial-software. aspx). . Retrieved 2009-03-26.<br />

[24] "SQL Server 2008 R2 Express <strong>Database</strong> Size Limit Increased to 10GB" (http:/ / blogs. msdn. com/ sqlexpress/ archive/ 2010/ 04/ 21/<br />

database-size-limit-increased-to-10gb-in-sql-server-2008-r2-express. aspx). . Retrieved 2010-04-23.<br />

[25] "What's up with SQL Server 2008 Express editions" (http:/ / blogs. msdn. com/ sqlexpress/ archive/ 2008/ 08/ 07/<br />

what-s-up-with-sql-server-2008-express-editions. aspx). . Retrieved 2008-08-15.<br />

[26] "Microsoft SQL Server 2008: Fast Track Data Warehouse" (http:/ / www. microsoft. com/ Sqlserver/ 2008/ en/ us/ fasttrack. aspx). .<br />

Retrieved 2009-03-26.<br />

[27] "Pages and Extents" (http:/ / msdn. microsoft. com/ en-us/ library/ ms190969. aspx). . Retrieved 2007-12-02.<br />

[28] "Table and Index Organization" (http:/ / msdn. microsoft. com/ en-us/ library/ ms189051. aspx). . Retrieved 2007-12-02.<br />

[29] "Buffer Management" (http:/ / msdn. microsoft. com/ en-us/ library/ aa337525. aspx). . Retrieved 2007-12-02.<br />

[30] "Single SQL Statement Processing" (http:/ / msdn. microsoft. com/ en-us/ library/ ms190623. aspx). . Retrieved 2007-12-03.<br />

[31] "Stored Procedure Basics" (http:/ / msdn. microsoft. com/ en-us/ library/ ms191436. aspx). . Retrieved 2007-12-03.<br />

[32] "Overview of CLR integration" (http:/ / msdn. microsoft. com/ en-us/ library/ ms131045. aspx). . Retrieved 2007-12-03.<br />

[33] "XML Support in SQL Server" (http:/ / msdn. microsoft. com/ en-us/ library/ ms345117(SQL. 90). aspx). . Retrieved 2008-09-05.<br />

[34] "Introducing Service Broker" (http:/ / msdn. microsoft. com/ en-us/ library/ ms166104. aspx). . Retrieved 2007-12-03.<br />

[35] "Types of Replication Overview" (http:/ / msdn. microsoft. com/ en-us/ library/ ms152531. aspx). . Retrieved 2007-12-03.<br />

[36] "Transactional Replication Overview" (http:/ / msdn. microsoft. com/ en-us/ library/ ms151176. aspx). . Retrieved 2007-12-03.<br />

[37] "Merge Replication Overview" (http:/ / msdn. microsoft. com/ en-us/ library/ ms152746. aspx). . Retrieved 2007-12-03.<br />

[38] "Snapshot replication Overview" (http:/ / msdn. microsoft. com/ en-us/ library/ ms151832. aspx). . Retrieved 2007-12-03.<br />

[39] "Analysis Services Architecture" (http:/ / msdn. microsoft. com/ en-us/ library/ ms174918. aspx). . Retrieved 2007-12-03.<br />

[40] "Data Mining Concepts" (http:/ / msdn. microsoft. com/ en-us/ library/ ms174949. aspx). . Retrieved 2007-12-03.<br />

[41] "SQL Server Reporting Services" (http:/ / msdn. microsoft. com/ en-us/ library/ ms159106. aspx). . Retrieved 2007-12-03.<br />

[42] (https:/ / connect. microsoft. com/ VisualStudio/ feedback/ details/ 532664/ cannot-open-a-sql-reporting-services-rptproj-file?wa=wsignin1.<br />

0)<br />

[43] <strong>MS</strong>DN Library: Reporting Services Render Method (http:/ / msdn. microsoft. com/ en-us/ library/ microsoft. wssux.<br />

reportingserviceswebservice. rsexecutionservice2005. reportexecutionservice. render. aspx) - See Device Information Settings (http:/ / msdn.<br />

microsoft. com/ en-us/ library/ ms155397. aspx)<br />

[44] Image Device Information Settings (http:/ / msdn. microsoft. com/ en-us/ library/ ms155373. aspx) - SSRS can render BMP, EMF, GIF,<br />

JPEG, PNG, and TIFF.<br />

[45] "An Introduction to SQL Server Notification Services" (http:/ / www. codeproject. com/ KB/ dotnet/ sqlns. aspx). . Retrieved 2008-11-14.<br />

[46] "SQL Server Notification Services Removed from SQL Server 2008" (http:/ / blog. desktopalert. net/ blogs/ da_blog/ archive/ 2008/ 02/ 16/<br />

25. aspx). . Retrieved 2008-09-17.<br />

[47] "Discontinued Functionality in SQL Server 2008 Reporting Services" (http:/ / technet. microsoft. com/ en-us/ library/ ms144231. aspx). .<br />

Retrieved 2008-09-17.<br />

[48] "Introducing SQL Server Notification Services" (http:/ / msdn. microsoft. com/ en-us/ library/ ms166495. aspx). . Retrieved 2007-12-03.<br />

[49] "Integration Services Overview" (http:/ / msdn. microsoft. com/ en-us/ library/ ms141263. aspx). . Retrieved 2007-12-03.<br />

[50] "Introduction to Full-Text Search" (http:/ / msdn. microsoft. com/ en-us/ library/ ms142545. aspx). . Retrieved 2007-12-03.<br />

[51] "Querying SQL Server using Full-Text Search" (http:/ / msdn. microsoft. com/ en-us/ library/ ms142559. aspx). . Retrieved 2007-12-03.<br />

[52] "Full-Text Search Architecture" (http:/ / msdn. microsoft. com/ en-us/ library/ ms142541. aspx). . Retrieved 2007-12-03.<br />

[53] <strong>MS</strong>DN: Introducing SQL Server Management Studio (http:/ / msdn. microsoft. com/ en-us/ library/ ms174173. aspx)<br />

[54] SQL Server Management Studio Express (http:/ / www. microsoft. com/ downloads/ details.<br />

aspx?FamilyId=C243A5AE-4BD1-4E3D-94B8-5A0F62BF7796& displaylang=en)<br />

[55] <strong>MS</strong>DN: Using Object Explorer (http:/ / msdn. microsoft. com/ en-us/ library/ ms173849. aspx)<br />

[56] SQL Server 2005 Management Tools (http:/ / www. sqlmag. com/ articles/ index. cfm?articleid=46798& )<br />

[57] "Introducing Business Intelligence Development Studio" (http:/ / msdn. microsoft. com/ hi-in/ library/ ms173767. aspx). . Retrieved<br />

2007-12-03.<br />

[58] "Transact-SQL Reference" (http:/ / msdn. microsoft. com/ en-us/ library/ ms189826. aspx). . Retrieved 2007-12-03.<br />

[59] "Features of SQL Native Client" (http:/ / msdn. microsoft. com/ en-us/ library/ ms131456. aspx). . Retrieved 2007-12-03.<br />

• Lance Delano, Rajesh George et al. (2005). Wrox's SQL Server 2005 Express Edition Starter Kit (Programmer to<br />

Programmer). Microsoft Press. ISBN 0764589237<br />

• Delaney, Kalen, et al. (2007). Inside SQL Server 2005: Query Tuning and Optimization. Microsoft Press. ISBN<br />

0735621969.<br />

• Ben-Gan, Itzik, et al. (2006). Inside Microsoft SQL Server 2005: T-SQL Programming. Microsoft Press. ISBN<br />

0735621977.


Microsoft SQL Server 23<br />

External links<br />

• Review:SQL Server 2008 R2 (http:/ / www. networkworld. com/ reviews/ 2010/<br />

050310-microsoft-sql-server-2008-test. html?ap1=rcb)<br />

• SQL Server Official Site (http:/ / www. microsoft. com/ sql/ default. mspx)<br />

• Longer version of the history from a dev team member (http:/ / blogs. msdn. com/ euanga/ archive/ 2006/ 01/ 19/<br />

514479. aspx)<br />

SQL CLR<br />

SQL CLR or SQLCLR (SQL Common Language Runtime) is technology for hosting of the Microsoft .NET<br />

common language runtime engine within SQL Server. The SQLCLR allows managed code to be hosted by, and run<br />

in, the Microsoft SQL Server environment.<br />

This technology, introduced in Microsoft SQL Server 2005, allow users for example to create the following types of<br />

managed code objects in SQL Server in .NET languages such as C# or VB.NET.<br />

• Stored procedures (SPs) which are analogous to procedures or void functions in procedural languages like VB or<br />

C,<br />

• triggers which are stored procedures that fire in response to Data Manipulation Language (DML) or Data<br />

Definition Language (DDL) events,<br />

• User-defined functions (UDFs) which are analogous to functions in procedural languages,<br />

• User-defined aggregates (UDAs) which allow developers to create custom aggregates that act on sets of data<br />

instead of one row at a time,<br />

• User-defined types (UDTs) that allow users to create simple or complex data types which can be serialized and<br />

deserialized within the database.<br />

The SQL CLR relies on the creation, deployment, and registration of .NET assemblies, which are physically stored<br />

in managed code dynamic load libraries (DLLs). These assemblies may contain .NET namespaces, classes, functions<br />

and properties.<br />

External links<br />

• <strong>MS</strong>DN: Using CLR Integration in SQL Server 2005 [1]<br />

• <strong>MS</strong>DN Forum on .NET Framework in SQL Server [2]<br />

• SqlClr.net Independent site [3]<br />

• SQL CLR Team Blog (No posts since 2006, might be dead) [4]<br />

References<br />

[1] http:/ / msdn2. microsoft. com/ en-us/ library/ ms345136. aspx<br />

[2] http:/ / forums. microsoft. com/ <strong>MS</strong>DN/ ShowForum. aspx?ForumID=86& SiteID=1<br />

[3] http:/ / www. sqlclr. net/<br />

[4] http:/ / blogs. msdn. com/ sqlclr/


SQL Query Analyzer 24<br />

SQL Query Analyzer<br />

SQL Query Analyzer is a tool that allows graphic creation of queries and SQL scripts. It makes use of templates.<br />

Microsoft® SQL Server 2000 SQL Query Analyzer is a graphical tool that allows you to:<br />

• Create queries and other SQL scripts and execute them against SQL Server databases. (Query window)<br />

• Quickly create commonly used database objects from predefined scripts. (Templates)<br />

• Quickly copy existing database objects. (Object Browser scripting feature)<br />

• Execute stored procedures without knowing the parameters. (Object Browser procedure execution feature)<br />

• Debug stored procedures. (T-SQL Debugger)<br />

• Debug query performance problems. (Show Execution Plan, Show Server Trace, Show Client Statistics, Index<br />

Tuning Wizard)<br />

• Locate objects within databases (object search feature), or view and work with objects. (Object Browser)<br />

• Quickly insert, update, or delete rows in a table. (Open Table window)<br />

• Create keyboard shortcuts for frequently used queries. (custom query shortcuts feature)<br />

• Add frequently used commands to the Tools menu. (customized Tools menu feature)<br />

You can run SQL Query Analyzer directly from the Start menu, or you run it from inside SQL Server Enterprise<br />

Manager. You can also run SQL Query Analyzer from the command prompt by executing the isqlw utility. [1]<br />

[1] http:/ / msdn. microsoft. com/ en-us/ library/ aa216945%28SQL. 80%29. aspx<br />

SQL Server Integration Services<br />

SQL Server Integration Services (SSIS) is a component of the Microsoft SQL Server database software which can<br />

be used to perform a broad range of data migration tasks.<br />

SSIS is a platform for data integration and workflow applications. It features a fast and flexible data warehousing<br />

tool used for data extraction, transformation, and loading (ETL). The tool may also be used to automate maintenance<br />

of SQL Server databases and updates to multidimensional cube data.<br />

First released with Microsoft SQL Server 2005, SSIS replaced Data Transformation Services, which had been a<br />

feature of SQL Server since Version 7.0. Unlike DTS, which was included in all versions, SSIS is only available in<br />

the "Standard" and "Enterprise" editions.<br />

Features<br />

SSIS features a wizard that lets user create packages which move data from a single data source to a destination with<br />

no transformations. This tool is called the Import/Export Wizard. The Wizard is appropriate for use to quickly<br />

move data into or out of SQL Server from or to a variety of sources, including text files and other SQL Server<br />

instances.<br />

Developers tasked with creating or maintaining SSIS packages use a visual development tool based on Microsoft<br />

Visual Studio called the SQL Server Business Intelligence Development Studio (BIDS). It allows users to edit SSIS<br />

packages using a drag-and-drop user interface. A scripting environment in which to write programming code is also<br />

available in the tool. The package holds a variety of elements that define the workflow for the package. Upon<br />

package execution, the tool provides color-coded, real-time monitoring.<br />

Connections


SQL Server Integration Services 25<br />

Tasks<br />

A connection includes the information necessary to connect to a particular data source. Tasks can reference the<br />

connection by its name, allowing the details of the connection to be changed or configured at runtime.<br />

A task is an atomic work unit that performs some action. There are a couple of dozen tasks that ship in the<br />

box, ranging from the file system task (which can copy or move files) to the data transformation task. The data<br />

transformation task actually copies data; it implements the ETL features of the product.<br />

Precedence Constraints<br />

Tasks are linked by precedence constraints. The precedence constraint preceding a particular task must be met<br />

before that task executes. The runtime supports executing tasks in parallel if their precedence constraints so<br />

allow. Constraints may otherwise allow different paths of execution depending on the success or failure of<br />

other tasks. Together with the tasks, precedence constraints comprise the workflow of the package.<br />

Event Handlers<br />

Variables<br />

A workflow can be designed for a number of events in the different scopes where they might occur. In this<br />

way, tasks may be executed in response to happenings within the package —such as cleaning up after errors.<br />

Tasks may reference variables to store results, make decisions, or affect their configuration.<br />

A package may be saved to a file or to a store with a hierarchical namespace within a SQL Server instance. In either<br />

case, the package content is persisted in XML.<br />

Once completed, the designer also allows the user to start the package's execution. Once started, the package may be<br />

readily debugged or monitored.<br />

----<br />

Features of the data flow task<br />

SSIS provides the following built-in transformations:<br />

• Conditional Split<br />

• Multicast<br />

• Union-All, Merge, and Merge Join<br />

• Sort<br />

• Fuzzy Grouping<br />

• Lookup and Fuzzy Lookup<br />

• Percentage Sampling and Row Sampling<br />

• Copy/Map, Data Conversion, and Derived Column<br />

• Aggregation<br />

• Data Mining Model Training, Data Mining Query, Partition Processing, and Dimension Processing<br />

• Pivot and<br />

• Slowly Changing Dimension<br />

• Script Component


SQL Server Integration Services 26<br />

Other included tools<br />

Aside from the Import/Export Wizard and the designer, the product includes a few other notable tools.<br />

DTEXEC executes a package from the command line wherever it may be stored. Before running the package, the<br />

tool may be instructed to apply configuration information, which will allow the same package to be reused with<br />

slightly different parameters, including different connection strings for its endpoints.<br />

DTUTIL provides the ability to manage packages, again from the command prompt. The tool can copy or move a<br />

package from a file into the server store, or back out again. Among a few other sundry functions, it can be used to<br />

delete, rename, encrypt, or decrypt packages.<br />

Extensibility and Programmability<br />

Users may write code to define their own connection objects, log providers, transforms, and tasks.<br />

SSIS features a programmable object model that allows developers to write their own hosts for package execution.<br />

Such a host can respond to events, start and stop packages, and so on. The object model also allows developers to<br />

create, store, and load packages, as well as create, destroy, and modify any of the contained objects.<br />

It can be used on all versions of SQL Server 2005 except Express and Workgroup.<br />

See also<br />

• Data Transformation Services<br />

External links<br />

• SQL Server Integration Services official site [1]<br />

• SQL Server Integration Services Discussion Forum [2]<br />

• SQLIS.com [3]<br />

• SSIS resources [4]<br />

• SSIS Scripts [5]<br />

• SQL Server 2005 version comparison [6]<br />

• SQL Server Integration Tools [7]<br />

References<br />

[1] http:/ / www. microsoft. com/ sqlserver/ 2008/ en/ us/ integration. aspx<br />

[2] http:/ / forums. microsoft. com/ <strong>MS</strong>DN/ ShowForum. aspx?ForumID=80& SiteID=1<br />

[3] http:/ / www. sqlis. com/<br />

[4] http:/ / www. bi-dw. info/ microsoft-ssis. htm<br />

[5] http:/ / www. cozyroc. com/ search-scripts/<br />

[6] http:/ / www. microsoft. com/ Sqlserver/ 2005/ en/ us/ compare-features. aspx<br />

[7] http:/ / pragmaticworks. com/ Products/ Business-Intelligence/ DTSxChange/ DTSxChange-Download. aspx


SQL Server Management Studio 27<br />

SQL Server Management Studio<br />

SQL Server Management Studio is a tool included with Microsoft<br />

SQL Server 2005 and later versions for configuring, managing, and<br />

administering all components within Microsoft SQL Server. The tool<br />

includes both script editors and graphical tools which work with<br />

objects and features of the server. [1]<br />

A central feature of SQL Server Management Studio is the Object<br />

Explorer, which allows the user to browse, select, and act upon any of<br />

the objects within the server. [2]<br />

Microsoft has also introduced a graphical configuration tool called<br />

SQL Server Management Studio Express (SS<strong>MS</strong>E) for SQL Server<br />

Express. [3] As with all of Microsoft's "Express" products, this is<br />

downloadable as a standalone tool or integrated with a SQL Server<br />

Express edition at no charge. The tool's limitations lie in the fact that it<br />

Microsoft SQL Server Management Studio<br />

showing a query, the results of the query, and the<br />

Object Explorer pane while connected to a SQL<br />

Server database engine instance.<br />

cannot manage SQL Server Analysis Services, Integration Services, Notification Services, Reporting Services, or<br />

SQL Server 2005 Mobile Edition. [4]<br />

See also<br />

• Comparison of database tools<br />

• Microsoft SQL Server<br />

External links<br />

• SQL Server 2008 Express With Management Tools [5]<br />

• SQL Server 2005 Management Tools (Subscription Required) [6]<br />

• Microsoft SQL Server Management Studio Express 2008 [7]<br />

References<br />

[1] <strong>MS</strong>DN: Introducing SQL Server Management Studio (http:/ / msdn2. microsoft. com/ en-us/ library/ ms174173. aspx)<br />

[2] <strong>MS</strong>DN: Using Object Explorer (http:/ / msdn2. microsoft. com/ en-us/ library/ ms173849. aspx)<br />

[3] SQL Server Management Studio Express (http:/ / www. microsoft. com/ downloads/ details.<br />

aspx?FamilyId=C243A5AE-4BD1-4E3D-94B8-5A0F62BF7796& displaylang=en)<br />

[4] Download details: Microsoft SQL Server Management Studio Express (http:/ / www. microsoft. com/ downloads/ details.<br />

aspx?FamilyID=c243a5ae-4bd1-4e3d-94b8-5a0f62bf7796& displaylang=en)<br />

[5] http:/ / www. microsoft. com/ downloads/ details. aspx?FamilyID=7522a683-4cb2-454e-b908-e805e9bd4e28& displaylang=en<br />

[6] http:/ / www. sqlmag. com/ articles/ index. cfm?articleid=46798&<br />

[7] http:/ / www. microsoft. com/ downloads/ details. aspx?FamilyID=08E52AC2-1D62-45F6-9A4A-4B76A8564A2B& displaylang=en


SQL Server Notification Services 28<br />

SQL Server Notification Services<br />

SQL Server Notification Services is being Removed from SQL Server 2008 [1], although SQL Server 2005 SP3<br />

allows for the Notification Services components to be run against the SQL Server 2008 <strong>Database</strong> Engine [2].<br />

Notification Services is based on SQL Server Technology, and sits atop the Microsoft .NET Framework.<br />

Notification Services offers a scalable server engine on which to run notification applications, with multi-server<br />

capability-providing flexibility and scalability for deploying applications.<br />

Notification Services was designed to ease the pain of developing and deploying notification applications that<br />

generate personalized, timely information to subscribers.<br />

To design, code and test all of the components that make up a robust Notification Services Application-such as<br />

notification scheduling, failure detection, retry logic, time zone management, notification grouping, and queue<br />

management, adding Notification Services to software applications can be a daunting task.<br />

Extensibility and Programmability<br />

A programming framework based on Transact-SQL and XML, provides a declarative programming model, and lends<br />

itself to quick prototyping and deployment of robust notification applications.<br />

An API for creating subscription management applications is provided, plus standard components for collecting<br />

event data from files and SQL Server databases, for formatting notifications using XSLT, and for sending<br />

notifications via Simple Mail Transfer Protocol (SMTP) or by writing notifications to a file.<br />

If the standard components do not meet the needs of an application, Notification Services is extendable by building<br />

custom components using the .NET family of programming languages, such as Microsoft Visual C# .NET and<br />

Microsoft Visual Basic .NET.<br />

Finally, Notification Services can communicate with a wide variety of Microsoft, third-party, and custom-built event<br />

providers and delivery protocols, enabling Notification Services to communicate with existing systems in<br />

heterogeneous environments.<br />

External links<br />

• Forums [3]<br />

• Microsoft Official Site [4]<br />

• TechNet [5]<br />

Books<br />

• Microsoft SQL Server 2005 Notification Services [6]<br />

• The Rational Guide to SQL Server Notification Services [7]


SQL Server Notification Services 29<br />

References<br />

[1] http:/ / social. msdn. microsoft. com/ forums/ en-US/ sqlnotificationservices/ thread/ 3f2dbd91-f223-411d-9c66-07be3ffcfed2/<br />

[2] http:/ / msdn. microsoft. com/ en-us/ library/ dd353312(SQL. 90). aspx<br />

[3] http:/ / forums. microsoft. com/ <strong>MS</strong>DN/ ShowForum. aspx?ForumID=97& SiteID=1<br />

[4] http:/ / www. microsoft. com/ sql/ technologies/ notification/ default. mspx<br />

[5] http:/ / www. microsoft. com/ technet/ prodtechnol/ sql/ 2005/ technologies/ ntfcsvcs. mspx<br />

[6] http:/ / www. amazon. com/ dp/ 0672327791/<br />

[7] http:/ / www. amazon. com/ dp/ 0972688811/<br />

SQL Server Reporting Services<br />

SQL Server Reporting Services (SSRS) is a server-based report generation software system from Microsoft. It can<br />

be used to prepare and deliver a variety of interactive and printed reports. It is administered via a web interface.<br />

Reporting services features a web services interface to support the development of custom reporting applications.<br />

SSRS competes with Crystal Reports and other business intelligence tools, and is included in Express, Workgroup,<br />

Standard, and Enterprise editions of Microsoft SQL Server as an install option. Reporting Services was first released<br />

in 2004 as an add-on to SQL Server 2000. The second version was released as a part of SQL Server 2005 in<br />

November 2005. The latest version was released as part of SQL Server 2008 in August 2008.<br />

In SSRS, reports are defined in Report Definition Language (RDL), an XML markup language. Reports can be<br />

designed using recent versions of Microsoft Visual Studio, with the included Business Intelligence Projects plug-in<br />

installed or with the included Report Builder, a simplified tool that does not offer all the functionality of Visual<br />

Studio. Reports defined by RDL can be generated in a variety of formats [1] including Excel, PDF, CSV, XML, TIFF<br />

(and other image formats [2] ), and HTML Web Archive. SQL Server 2008 SSRS can also prepare reports in<br />

Microsoft Word (DOC) format.<br />

Third-party report generators offer additional output formats.<br />

Users can interact with the Report Server web service directly, or instead use Report Manager, a web-based<br />

application that interfaces with the Report Server web service. With Report Manager, users can view, subscribe to,<br />

and manage reports as well as manage and maintain data sources and security settings. Reports can be delivered via<br />

e-mail or placed on a file system. Security is role-based and can be assigned on an individual item, such as a report<br />

or data source, a folder of items, or site wide. Security roles and rights are inherited and can be overloaded.<br />

In addition to using the standalone Report Server that comes with SQL Server, RDL reports can also be viewed<br />

using the ASP.NET Report<strong>View</strong>er web control or the Report<strong>View</strong>er Windows Forms control. This allows reports to<br />

be embedded directly into web pages or .NET Windows applications. The Report<strong>View</strong>er control processes reports in<br />

one of two ways: (a) server processing, where the report is rendered by and obtained from the Report Server; and (b)<br />

local processing, where the control renders the RDL file itself.<br />

SQL Server Reporting Services also support ad hoc reports: the designer develops a report schema and deploys it on<br />

the reporting server, where the user can choose relevant fields/data and generate reports. Users can then download<br />

the reports locally.<br />

The next release of Reporting Services is scheduled to be released by May 2010 [3] , and is part of SQL Server 2008<br />

R2 a larger Business Intelligence release formerly code named Kilimanjaro.


SQL Server Reporting Services 30<br />

See also<br />

• Microsoft SQL Server<br />

• http:/ / msdn. microsoft. com/ en-us/ library/ ms159253(SQL. 90). aspx<br />

External links<br />

• Microsoft SQL Server: Reporting Services home page [4]<br />

• SSW: Rules to Better SQL Reporting Services 2005 [5]<br />

• SSW: Microsoft SQL Reporting Services Suggestions [6]<br />

• DNR TV: Reporting Services Part A [7]<br />

• DNR TV: Reporting Services Part B [8]<br />

• DNR TV: Reporting Services Part C [9]<br />

• Report<strong>View</strong>er Control in Visual Studio 2008: Got Report <strong>View</strong>er? [10]<br />

• Google Knol article on SSRS [11]<br />

References<br />

[1] <strong>MS</strong>DN Library: Reporting Services Render Method (http:/ / msdn2. microsoft. com/ en-us/ library/ microsoft. wssux.<br />

reportingserviceswebservice. rsexecutionservice2005. reportexecutionservice. render. aspx) - See Device Information Settings (http:/ / msdn2.<br />

microsoft. com/ en-us/ library/ ms155397. aspx)<br />

[2] Image Device Information Settings (http:/ / msdn2. microsoft. com/ en-us/ library/ ms155373. aspx) - SSRS can render BMP, EMF, GIF,<br />

JPEG, PNG, and TIFF.<br />

[3] SQL Server 2008 R2 gets an official date (http:/ / blogs. technet. com/ dataplatforminsider/ archive/ 2010/ 01/ 19/<br />

sql-server-2008-r2-gets-an-official-date. aspx), Microsoft SQL Server Team Blog, January 19, 2010<br />

[4] http:/ / www. microsoft. com/ sql/ technologies/ reporting/ default. mspx<br />

[5] http:/ / www. ssw. com. au/ Ssw/ Standards/ Rules/ RulesToBetterSQLReportingServices. aspx<br />

[6] http:/ / www. ssw. com. au/ SSW/ Standards/ Better<strong>Software</strong>Suggestions/ ReportingServices. aspx<br />

[7] http:/ / www. dnrtv. com/ default. aspx?showNum=26<br />

[8] http:/ / www. dnrtv. com/ default. aspx?showNum=27<br />

[9] http:/ / www. dnrtv. com/ default. aspx?showNum=28<br />

[10] http:/ / www. gotreportviewer. com/<br />

[11] http:/ / knol. google. com/ k/ christian-eder/ microsoft-sql-server-reporting-services/ xfqw1gyel5ga/ 7#


Microsoft Query by Example 31<br />

Microsoft Query by Example<br />

Microsoft Query by Example (QBE) is a method of creating database queries using examples based on a text<br />

string, the name of a document or a list of documents. The QBE system converts the user input into a formal<br />

database query. This approach allows the user to perform powerful searches without the need of having to learn a<br />

more formalized query mechanism such as Structured Query Language (SQL). It is derived from Moshé M. Zloof's<br />

original Query by Example (QBE) implemented in the mid-1970s at IBM's Research Centre in Yorktown, New<br />

York. Microsoft Access is an example of Microsoft QBE.<br />

See also<br />

Microsoft SQL Server


Microsoft Analysis Services 32<br />

Microsoft Analysis Services<br />

Developer(s) Microsoft<br />

Stable release Analysis Services 2008 / August 6, 2008<br />

Operating<br />

system<br />

Microsoft Windows<br />

Type OLAP, Data Mining<br />

License Microsoft EULA<br />

Website [1]<br />

Microsoft Analysis Services is part of Microsoft SQL Server, a database management system. Microsoft has<br />

included a number of services in SQL Server related to Business Intelligence and Data Warehousing. These services<br />

include Integration Services and Analysis Services. Analysis Services includes a group of OLAP and Data Mining<br />

capabilities.<br />

History<br />

In 1996, Microsoft began its foray into the OLAP Server business by acquiring the OLAP software technology from<br />

Israeli-based Panorama <strong>Software</strong>. [2] Just over two years later, in 1998, Microsoft released OLAP Services as part of<br />

SQL Server 7. OLAP Services supported MOLAP, ROLAP, and HOLAP architectures, and it used OLEDB for<br />

OLAP as the client access API and MDX as a query language. It could work in client-server mode or offline mode<br />

with local cube files. [3]<br />

In 2000, Microsoft released Analysis Services 2000. The rename from OLAP Services happened because the<br />

inclusion of Data Mining services broadened the scope of the product from just OLAP. Analysis Services 2000 was<br />

considered an evolutionary release, since it was built on the same architecture as OLAP Services and therefore<br />

backward compatible with it. Some of the major improvements included more flexibility in dimension design<br />

through support of parent child dimensions, changing dimensions, and virtual dimensions. Another major area of<br />

improvement was a greatly enhanced calculation engine with support for unary operators, custom rollups, and cell<br />

calculations. Other new features were dimension security, distinct count, connectivity over HTTP, session cubes,<br />

grouping levels, and many others. [4]<br />

In 2005, Microsoft released the next generation of OLAP and Data Mining technology as Analysis Services 2005. It<br />

maintained backward compatibility on the API level: although applications written with OLE DB for OLAP and<br />

MDX continue to work, the architecture of the product was completely different. The major change came to the<br />

model in the form of UDM - Unified Dimensional Model. [5]


Microsoft Analysis Services 33<br />

Timeline<br />

The key events in the history of Microsoft Analysis Services cover a period starting in 1996.<br />

Microsoft Analysis Services Events<br />

Date Event<br />

1996-07-01 Microsoft opens new team to build an OLAP product, codenamed Plato (permutation of letters from OLAP)<br />

1996-07-15 Panorama <strong>Software</strong> delegation meets with Microsoft<br />

1996-10-27 Microsoft announces acquisition of Panorama <strong>Software</strong> development team<br />

1998-11 OLAP Services 7.0 (codename Sphinx) ships<br />

2000-08 Analysis Services 2000 (codename Shiloh) ships<br />

2001-11 XML for Analysis <strong>Software</strong> Development Kit 1.0 ships<br />

2003-04 ADOMD.NET and XML for Analysis SDK 1.1 ship<br />

2005-10-28 Analysis Services 2005 (codename Yukon) ships<br />

2008-08-06 Analysis Services 2008 (codename Katmai) ships<br />

Storage Modes<br />

Microsoft Analysis Services takes a neutral position in the MOLAP vs. ROLAP arguments among OLAP products.<br />

It allows all the flavors of MOLAP, ROLAP and HOLAP to be used within the same model.<br />

Partition Storage Modes<br />

• MOLAP - Multidimensional OLAP - Both fact data and aggregations are processed, stored, and indexed using a<br />

special format optimized for multidimensional data.<br />

• ROLAP - Relational OLAP - Both fact data and aggregations remain in the relational data source, eliminating the<br />

need for special processing.<br />

• HOLAP - Hybrid OLAP - This mode uses the relational data source to store the fact data, but pre-processes<br />

aggregations and indexes, storing these in a special format, optimized for multidimensional data.<br />

Dimension Storage Modes<br />

• MOLAP - dimension attributes and hierarchies are processed and stored in the special format<br />

• ROLAP - dimension attributes are not processed and remain in the relational data source. Partitions dimensioned<br />

by ROLAP dimensions must be in the ROLAP mode as well.<br />

APIs and Object Models<br />

Microsoft Analysis Services supports different sets of APIs and object models for different operations and in<br />

different programming environments


Microsoft Analysis Services 34<br />

Querying<br />

• XML for Analysis - The lowest level API. It can be used from any platform and in any language which support<br />

HTTP and XML<br />

• OLE DB for OLAP - Extension of OLEDB. COM based and suitable for C/C++ programs on Windows platform.<br />

• ADOMD - Extension of ADO. COM Automation based and suitable for VB programs on Windows platform.<br />

• ADOMD.NET - Extension of ADO.NET. .NET based and suitable for managed code programs on CLR<br />

platforms.<br />

Administration and Management<br />

• DSO - For AS 2000. COM Automation based and suitable for VB programs on Windows platform.<br />

• AMO - For AS 2005. .NET based and suitable for managed code programs on CLR platforms.<br />

Query Languages<br />

Microsoft Analysis Services supports the following query languages<br />

Data Definition Language (DDL)<br />

DDL in Analysis Services is XML based and supports commands such as , , , <br />

etc. For Data Mining models import and export, it also supports PMML.<br />

Data Manipulation Language (DML)<br />

• MDX - for querying OLAP cubes<br />

• SQL - small subset of SQL for querying OLAP cubes and dimensions as if they were tables<br />

• DMX - for querying Data Mining models<br />

See also<br />

• Business intelligence<br />

• Comparison of OLAP Servers<br />

Bibliography<br />

• Sivakumar Harinath, Stephen Quinn: Professional SQL Server Analysis Services 2005 with MDX. ISBN<br />

0-7645-7918-5<br />

• Teo Lachev: Applied Microsoft Analysis Services 2005 : And Microsoft Business Intelligence Platform. ISBN<br />

0-9766353-0-5<br />

• Reed Jacobson: Microsoft(r) SQL Server(tm) 2000 Analysis Services Step by Step. ISBN 0-7356-0904-7<br />

• Claude Seidman: Data Mining with Microsoft SQL Server 2000 Technical Reference.'' ISBN 0-7356-1271-4<br />

• George Spofford: MDX-Solutions. Wiley, 2001, ISBN 0-471-40046-7<br />

• Mosha Pasumansky, Mark Whitehorn, Rob Zare: Fast Track to MDX. ISBN 1-84628-174-1<br />

• ZhaoHui Tang, Jamie MacLennan: Data Mining with SQL Server 2005. ISBN 0-471-46261-6<br />

• Edward Melomed, Irina Gorbach, Alexander Berger, Py Bateman: Microsoft SQL Server 2005 Analysis Services.<br />

ISBN 0-672-32782-1<br />

• Chris Webb, Marco Russo, Alberto Ferrary: Expert Cube Development with Microsoft SQL Server 2008 Analysis<br />

Services. ISBN 1-847-19722-1


Microsoft Analysis Services 35<br />

External links<br />

• Microsoft Analysis Services [1]<br />

• Microsoft OLAP Information [6]<br />

• Microsoft Data Mining Information [7]<br />

• Analysis Services public forum [8]<br />

• Analysis Services information hub - FAQs,Webcasts,articles,etc [9]<br />

• Videos about Analysis Services [10]<br />

References<br />

[1] http:/ / www. microsoft. com/ sql/ technologies/ analysis/ default. mspx<br />

[2] "Microsoft Announces Acquisition Of Panorama Online Analytical Processing (OLAP) Technology" (http:/ / www. microsoft. com/<br />

presspass/ press/ 1996/ oct96/ pan2pr. mspx). .<br />

[3] "<strong>MS</strong> SQL Server 7.0 OLAP Services" (http:/ / technet. microsoft. com/ en-us/ library/ cc966398. aspx). .<br />

[4] "SQL Server 2000 – Analysis Services" (http:/ / msdn. microsoft. com/ en-us/ sqlserver/ bb671229. aspx). .<br />

[5] "SQL Server 2005 Analysis Services" (http:/ / www. microsoft. com/ sqlserver/ 2005/ en/ us/ Analysis-Services. aspx). .<br />

[6] http:/ / www. mosha. com/ msolap<br />

[7] http:/ / www. sqlserverdatamining. com<br />

[8] http:/ / forums. microsoft. com/ <strong>MS</strong>DN/ ShowForum. aspx?ForumID=83& SiteID=1<br />

[9] http:/ / www. ssas-info. com<br />

[10] http:/ / www. learnmicrosoftbi. com<br />

Professional Association for SQL Server<br />

The Professional Association for SQL Server, also known as PASS, is the global community for Microsoft SQL<br />

Server professionals. An independent, not-for-profit, user-run association, PASS was founded in 1999 with funds<br />

from Microsoft and Computer Associates. PASS is run by a Board of Directors, elected by PASS members for<br />

two-year terms.<br />

There are currently over 200 local PASS Chapters around the world. Each fall PASS gathers at the annual PASS<br />

Summit, the largest conference in the world for SQL Server professionals.<br />

Global Summit Locations<br />

• 1999 - Chicago<br />

• 2000 - San Francisco<br />

• 2001 - scheduled for Orlando Sept 15,2001 - Canceled<br />

• 2002 - Jan Denver<br />

• 2002 - Nov Seattle<br />

• 2003 - Seattle<br />

• 2004 - Orlando<br />

• 2005 - Dallas<br />

• 2006 - Seattle<br />

• 2007 - Denver<br />

• 2008 - Seattle<br />

• 2009 - Seattle<br />

• 2010 - Seattle


Professional Association for SQL Server 36<br />

European Conference Locations<br />

• 2000 - London<br />

• 2005 - Munich<br />

• 2006 - Barcelona<br />

• 2008 - Neuss, Germany<br />

• 2009 - Neuss, Germany<br />

• 2010 - Neuss, Germany<br />

External links<br />

• Official site [1]<br />

References<br />

[1] http:/ / www. sqlpass. org/<br />

AutoNumber<br />

AutoNumber is a type of data used in Microsoft Access tables to generate an automatically incremented numeric<br />

counter. It may be used to create an identity column which uniquely identifies each record in a table. Only one<br />

AutoNumber field is allowed in each table.<br />

The data type was called Counter in Access 2.0. [1]<br />

Forms<br />

There are three forms in which AutoNumbers can be generated: [2]<br />

start value plus increment<br />

random<br />

AutoNumbers generated by this mechanism start with the start number and increment with the increment<br />

value, checking for collision with existing table rows. [2]<br />

AutoNumbers generated by this mechanism are assigned using a pseudo-random number generator that<br />

generates long integers and checks for collisions with existing table rows. [2]<br />

replication IDs<br />

AutoNumbers generated by this mechanism are IDs generated in a manner to make it highly improbable that<br />

collisions will occur. [2] They are Microsoft Globally Unique Identifiers, and the probability of collision is low<br />

until the year AD 3400. [3]<br />

The default size of an AutoNumber is a 4-byte (long) integer. This is the size used for start+increment and random<br />

AutoNumbers. For replication ID AutoNumbers, the FieldSize property of the field is changed from long integer to<br />

Replication ID. [2]<br />

If an AutoNumber is a long integer, the NewValues property determines whether it is of the start+increment or<br />

random form. The values that this property can take are "Increment" and "Random". [4]


AutoNumber 37<br />

Use<br />

The default AutoNumber type is a start+increment counter, with a start value of 1 and an increment of 1. Although in<br />

many instances such an AutoNumber field will appear as if it contains the row count, it does not. Deletion of rows<br />

from a table, for example, does not cause AutoNumber fields to be re-numbered, but instead leaves "holes" in the<br />

numbering. Similarly, if a transaction to add a row to a table is begun but later aborted, the AutoNumber assigned for<br />

that row will not be re-used. [2]<br />

The default start+increment form with the start value of 1 and increment of 1 is not suitable for all circumstances.<br />

There are reasons to choose each form, and trade-offs in doing so. [2]<br />

The default start and increment values might reveal information about a table that it is desired not to reveal to people<br />

viewing individual table rows. For example, using an AutoNumber field for a customer ID might reveal information<br />

that it is desirable not to reveal to, say, customer number 6. This is one example of occasion where the start value of<br />

an AutoNumber field is raised, so that customer number 6 has, say, AutoNumber field value 10006. [2]<br />

Using random values is desirable in cases where it would be unfortunate if it were possible to guess the next values<br />

assigned to new rows in the table. This usage is rare, however. [2]<br />

A common problem with AutoNumber fields is encountered if tables are replicated. If multiple users are using<br />

multiple replicas of the table, then it is likely that they will end up assigning the same values to AutoNumber fields<br />

in new rows that they add, causing replication conflicts when the replicas are merged. [2]<br />

This problem is addressed in two ways. First, it is possible to use Replication IDs for such AutoNumbers. [2] Such<br />

replication IDs, being GUIDs, will be unique across replicas, with a low probability of collision. [3] Second, when<br />

Access creates table replicas, it automatically changes AutoNumbers of the start+increment form to the random<br />

form. [4]<br />

Manipulation of counters using DDL<br />

The following Data Definition Language (DDL) query creates an AutoNumber field with a start value and an<br />

increment:<br />

CREATE TABLE Table1 (<br />

);<br />

Field1 COUNTER ([beginning_number], [increment_number]),<br />

[...]<br />

This query resets the counter:<br />

ALTER TABLE Table1<br />

ALTER COLUMN Field1 COUNTER ([beginning_number], [increment_number]);<br />

An alternative method of resetting the counter is to drop column re-add it (this has the side effect of renumbering<br />

existing rows in the table):<br />

ALTER TABLE Table1 DROP COLUMN Field1;<br />

ALTER TABLE Table1 ADD Field1 COUNTER;


AutoNumber 38<br />

Further reading<br />

• Microsoft (2009). ".NET Framework Developer's Guide: Retrieving Identity or Autonumber Values" [5] . <strong>MS</strong>DN.<br />

Microsoft. Retrieved 2009-07-05.<br />

External links<br />

• Set Autonumber field using VBA [6]<br />

References<br />

[1] Prague, Cary, and Michael Irwin. Access 2002 Bible. New York: Wiley Publishing, Inc. p. 109.<br />

[2] Chris Grover, Matthew MacDonald, and Emily A. Vander Veer (2007). Office 2007: The Missing Manual. O'Reilly. pp. 636–638.<br />

ISBN 0596514220.<br />

[3] Microsoft (2006-01-09). "KBID 170117: How to use GUID fields in Access from Visual C++" (http:/ / support. microsoft. com/ kb/ 170117).<br />

Microsoft KnowledgeBase. Microsoft. .<br />

[4] Microsoft (2009). "Microsoft Access Visual Basic reference: NewValues Property" (http:/ / msdn. microsoft. com/ en-us/ library/<br />

aa206753(office. 10). aspx). <strong>MS</strong>DN. Microsoft. . Retrieved 2009-07-05.<br />

[5] http:/ / msdn. microsoft. com/ en-us/ library/ ks9f57t0(VS. 71). aspx<br />

[6] http:/ / www. eraserve. com/ tutorials/ <strong>MS</strong>ACCESS_Autonumber_VBA_Example. asp<br />

Bulk Copy Program<br />

Bulk Copy Program [1] (BCP) is a command-line tool used to import or export data against a Microsoft SQL Server<br />

or Sybase database. The tool is often more efficient than more recent GUI-based applications, such as DTS, to<br />

import and extract data.<br />

Common Uses<br />

Some common uses of BCP are:<br />

• Stage a raw text file in a table for further data scrubbing.<br />

• Create a delimited or fixed-width file for exchange with another party.<br />

• Backup data from a database vendor specific format, to a common text format.<br />

Other Platforms<br />

• Oracle uses SQL*LOADER<br />

• DB2 uses the LOAD command<br />

References<br />

[1] "Microsoft SQL Server bcp Utility" (http:/ / msdn. microsoft. com/ en-us/ library/ ms162802. aspx). Microsoft. April 2010. .


Business Intelligence Development Studio 39<br />

Business Intelligence Development Studio<br />

Business Intelligence Development Studio (BIDS) is the IDE from Microsoft used for developing data analysis and<br />

Business Intelligence solutions utilizing the Microsoft SQL Server Analysis Services, Reporting Services and<br />

Integration Services. It is based on the Microsoft Visual Studio development environment but customizes with the<br />

SQL Server services-specific extensions and project types, including tools, controls and projects for reports, ETL<br />

dataflows, OLAP cubes and data mining structure.<br />

External links<br />

• Introducing Business Intelligence Development Studio [1]<br />

References<br />

[1] http:/ / msdn. microsoft. com/ en-us/ library/ ms173767%28SQL. 90%29. aspx<br />

Scome<br />

In database programming, the scome technique is a mechanism used to collect RDB<strong>MS</strong> system data from remote<br />

linked servers via a central SQL Server. This data can be used to monitor the status of managed database servers and<br />

their associated databases. The method comprises of two T-SQL stored procedures that together are used to iterate<br />

over records in SQL Server system tables and Dynamic Management <strong>View</strong>s. The stored procedures are typically<br />

executed from a central master SQL Server.<br />

Syntactic arrangement<br />

The central monitoring SQL Server communicates with the remote<br />

RDB<strong>MS</strong> through a linked server object [1] . A collecting stored<br />

procedure (known from here on as the collector) is created on the<br />

monitoring SQL Server. The remote linked server name is passed to<br />

the collector in the form of a stored procedure parameter [2] .<br />

CREATE STORED PROC Collect_system_data @Server_name N'VARCHAR(256)<br />

AS<br />

...<br />

SELECT [system data] FROM @Server_name.master.dbo.[system table]<br />

(Insert results into corresponding table)<br />

The iterating stored procedure (known from here on as the iterator)<br />

retrieves the name of all linked servers from a table through the means<br />

Using SCOME to collect Failed Jobs data<br />

of a cursor or memory table. The iterator executes the collector for each linked server, which in turn inserts the<br />

desired data into a corresponding table.<br />

CREATE STORED PROC Iterate_Collect_system_data<br />

AS<br />

DECLARE @Server_Name<br />

...<br />

(For each linked server name retrieved from the server name table)


Scome 40<br />

EXEC Collect_system_data @Server_name<br />

This results in a table with the desired data for all monitored linked RDB<strong>MS</strong>'. This data is then accessed directly<br />

through the RDB<strong>MS</strong> or via an interfacing platform such as one created using the .NET Framework.<br />

Advantages of the scome technique<br />

An advantage of using the scome technique is that a complete custom designed monitoring solution can be<br />

developed with only T-SQL skills, giving the database administrator flexibility to write monitoring reports based on<br />

any meta data available within system tables and views. This can be achieved out-of-the-box with the utilties<br />

provided by SQL Server. Monitored servers are not limited to being SQL Servers. Any RDB<strong>MS</strong>, such as Oracle, can<br />

be monitored using scome provided there is an OLE-DB provider from Microsoft to allow the linked server to be<br />

created for that RDB<strong>MS</strong>.<br />

Disadvantages of the scome technique<br />

Data is collected from often undocumented RDB<strong>MS</strong> system tables that may change from version to version, thus<br />

breaking the mechanism.<br />

History<br />

The term scome became prevalent after appearing on the SQL Server community website, SQLServerCentral. It is<br />

thought that the term scome originally stood for Servers Coming Outta My Ears.<br />

See also<br />

Administering Multiple Servers Using a SQL Server Central Management Server [3]<br />

External links<br />

• Dynamic Management <strong>View</strong>s and Functions [4] , Microsoft Technet.<br />

• Linking Servers [5] , Microsoft Developer Network.<br />

• Using DMVs with SCOME [6] , Monitoring SQL Server Centrally.<br />

References<br />

[1] "Linking Servers" (http:/ / msdn. microsoft. com/ en-us/ library/ ms188279. aspx). Microsoft Developer Network. . Retrieved 2009-11-02.<br />

[2] Salem, Drew (April 20, 2009). "SCOME - Centralized monitoring with ASP.Net" (http:/ / www. sqlservercentral. com/ articles/ ASP. NET/<br />

66319). SQL Server Central (Red Gate <strong>Software</strong>). .<br />

[3] http:/ / msdn. microsoft. com/ en-us/ library/ bb895144. aspx,<br />

[4] http:/ / technet. microsoft. com/ en-us/ library/ ms188754. aspx<br />

[5] http:/ / msdn. microsoft. com/ en-us/ library/ ms188279. aspx<br />

[6] http:/ / www. sqlservermonitor. com


Data Transformation Services 41<br />

Data Transformation Services<br />

Data Transformation Services, or DTS, is a set of objects and utilities to allow the automation of extract, transform<br />

and load operations to or from a database. The objects are DTS packages and their components, and the utilities are<br />

called DTS tools. DTS was included with earlier versions of Microsoft SQL Server, and was almost always used<br />

with SQL Server databases, although it could be used independently with other databases.<br />

DTS allows data to be transformed and loaded from heterogeneous sources using OLE DB, ODBC, or text-only<br />

files, into any supported database. DTS can also allow automation of data import or transformation on a scheduled<br />

basis, and can perform additional functions such as FTPing files and executing external programs. In addition, DTS<br />

provides an alternative method of version control and backup for packages when used in conjunction with a version<br />

control system, such as Microsoft Visual SourceSafe .<br />

History<br />

In SQL Server versions 6.5 and earlier,<br />

<strong>Database</strong> administrators (DBAs) used SQL<br />

Server Transfer Manager and Bulk Copy<br />

Program, included with SQL Server, to<br />

transfer data. These tools had significant<br />

shortcomings, and many DBAs used<br />

third-party tools such as Pervasive Data<br />

Integrator to transfer data more flexibly and<br />

easily. When SQL Server 7 was released,<br />

"Data Transformation Services" was packaged with it to replace all these tools.<br />

Here a DTS package is edited with DTS Designer in Windows XP.<br />

SQL Server 2000 expanded DTS functionality in several ways. Many new types of tasks were made, including the<br />

ability to FTP files, move databases or database components, and add messages into Microsoft Message Queue. DTS<br />

packages can be saved as a Visual Basic file in SQL Server 2000, and this can be expanded to save into any<br />

COM-compliant language. Packages were also integrated into Windows 2000 security, DTS tools were made more<br />

user-friendly, and tasks can accept input and output parameters.<br />

DTS comes with all editions of SQL Server 7 and 2000, but was superseded by SQL Server Integration Services in<br />

the Microsoft SQL Server 2005 release.<br />

DTS packages<br />

The DTS package is the fundamental logical component of DTS; every DTS object is a child component of the<br />

package. Packages are used whenever one modifies data using DTS. All the metadata about the data transformation<br />

is contained within the package. Packages can be saved directly in a SQL Server, or can be saved in the Microsoft<br />

Repository or in COM files. SQL Server 2000 also allows a programmer to save packages in a Visual Basic or other<br />

language file. (When stored to a VB file, the package is actually scripted -- that is, a VB script is executed to<br />

dynamically create the package objects and its component objects.)<br />

A package can contain any number of connection objects, but does not have to contain any. These allow the package<br />

to read data from any OLE DB-compliant data source, and can be expanded to handle other sorts of data. The<br />

functionality of a package is organized into tasks and steps.<br />

A DTS Task is a discrete set of functionalities executed as a single step in a DTS package. Each task defines a work<br />

item to be performed as part of the data movement and data transformation process or as a job to be executed.


Data Transformation Services 42<br />

Data Transformation Services supplies a number of tasks that are part of the DTS object model and that can be<br />

accessed graphically through the DTS Designer or accessed programmatically. These tasks, which can be configured<br />

individually, cover a wide variety of data copying, data transformation and notification situations. For example, the<br />

following types of tasks represent some actions that you can perform by using DTS: executing a single SQL<br />

statement, sending an email, and transferring a file with FTP.<br />

A step within a DTS package describes the order in which tasks are run and the precedence constraints that describe<br />

what to do in the case of failure. These steps can be executed sequentially or in parallel.<br />

Packages can also contain global variables which can be used throughout the package. SQL Server 2000 allows input<br />

and output parameters for tasks, greatly expanding the usefulness of global variables. DTS packages can be edited,<br />

password protected, scheduled for execution, and retrieved by version.<br />

DTS tools<br />

DTS tools packaged with SQL Server include the DTS wizards, DTS Designer, and DTS Programming Interfaces.<br />

DTS wizards<br />

The DTS wizards can be used to perform simple or common DTS tasks. These include the Import/Export Wizard and<br />

the Copy <strong>Database</strong> Wizard. They provide the simplest method of copying data between OLE DB data sources. There<br />

is a great deal of functionality that is not available by merely using a wizard. However, a package created with a<br />

wizard can be saved and later altered with one of the other DTS tools.<br />

A Create Publishing Wizard is also available to schedule packages to run at certain times. This only works if SQL<br />

Server Agent is running; otherwise the package will be scheduled, but will not be executed.<br />

DTS Designer<br />

The DTS Designer is a graphical tool used to build complex DTS Packages with workflows and event-driven logic.<br />

DTS Designer can also be used to edit and customize DTS Packages created with the DTS wizard.<br />

Each connection and task in DTS Designer is shown with a specific icon. These icons are joined with precedence<br />

constraints, which specify the order and requirements for tasks to be run. One task may run, for instance, only if<br />

another task succeeds (or fails). Other tasks may run concurrently.<br />

The DTS Designer has been criticized for having unusual quirks and limitations, such as the inability to visually<br />

copy and paste multiple tasks at one time. Many of these shortcomings have been overcome in SQL Server<br />

Integration Services, DTS's successor.<br />

DTS Query Designer<br />

A graphical tool used to build queries in DTS.<br />

DTS Run Utility<br />

DTS Packages can be run from the command line using the DTSRUN Utility.<br />

The utility is invoked using the following syntax:<br />

dtsrun /S server_name[\instance_name]<br />

]<br />

{<br />

{ {/[~]U user_name [/[~]P password]} | /E }<br />

{/[~]N package_name }<br />

| {/[~]G package_guid_string}


Data Transformation Services 43<br />

]<br />

}<br />

| {/[~]V package_version_guid_string}<br />

[/[~]M package_password]<br />

[/[~]F filename]<br />

[/[~]R repository_database_name]<br />

[/A global_variable_name:typeid=value]<br />

[/L log_file_name]<br />

[/W NT_event_log_completion_status]<br />

[/Z] [/!X] [/!D] [/!Y] [/!C]<br />

When passing in parameters which are mapped to Global Variables, you are required to include the typeid. This is<br />

rather difficult to find on the Microsoft site. Below are the TypeIds used in passing in these values.<br />

Boolean 11<br />

Currency 6<br />

Date 7<br />

Decimal 14<br />

HRESULT 25<br />

Int 22<br />

Integer (1-byte) 16<br />

Integer (8-byte) 20<br />

Integer (small) 2<br />

Integer 3<br />

LPSTR 30<br />

LPWSTR 31<br />

Pointer 26<br />

Real (4-byte) 4<br />

Real (8-byte) 5<br />

String 8<br />

Unsigned int (1-byte) 17<br />

Unsigned int (2-byte) 18<br />

Unsigned int (4-byte) 19<br />

Unsigned int (8-byte) 21<br />

Unsigned int 23<br />

See also<br />

• OLAP<br />

• Data warehouse<br />

• Data mining<br />

• SQL Server Integration Services<br />

• Meta Data Services.


Data Transformation Services 44<br />

References<br />

• Chaffin, Mark; Knight, Brian; and Robinson, Todd (2003). Professional SQL Server 2000 DTS. Wrox Press<br />

(Wiley Publishing, Inc.). ISBN 0-7645-4368-7.<br />

External links<br />

• Microsoft SQL Server: Data Transformation Services (DTS) [1]<br />

• SQL DTS unique DTS information resource [2]<br />

• Understanding Microsoft Repository [3]<br />

• SSIS-DTS Package Search, a tool to search and document DTS packages. SSIS too! [4]<br />

References<br />

[1] http:/ / msdn2. microsoft. com/ en-us/ library/ aa933484(SQL. 80). aspx<br />

[2] http:/ / www. sqldts. com/<br />

[3] http:/ / support. microsoft. com/ kb/ 238912<br />

[4] http:/ / www. dtspackagesearch. com<br />

<strong>Database</strong> engine tuning advisor<br />

The database engine tuning advisor is a tool for Microsoft SQL Server that enables database tuning. It can improve<br />

performance for query by tuning the indexes, creating, modifying and deleting partition and or indexes.<br />

It can be configured to enabled online or offline tuning.<br />

Enterprise Manager<br />

Enterprise Manager is the primary administrative tool for Microsoft SQL Server 2000 and provides a MMC–based<br />

user interface that allows users to:<br />

• Define groups of servers running Microsoft SQL Server.<br />

• Register individual servers in a group.<br />

• Configure all Microsoft SQL Server options for each registered server.<br />

• Create and administer all Microsoft SQL Server databases, objects, logins, users, and permissions in each<br />

registered server.<br />

• Define and execute all Microsoft SQL Server administrative tasks on each registered server.<br />

• Design and test SQL statements, batches, and scripts interactively by invoking SQL Query Analyzer.<br />

• Invoke the various wizards defined for Microsoft SQL Server.<br />

MMC is a tool that presents a common interface for managing different server applications in a Microsoft Windows<br />

network. Server applications provide a component called an MMC snap-in that presents MMC users with a user<br />

interface for managing the server application. Microsoft SQL Server Enterprise Manager is the Microsoft SQL<br />

Server 2000 MMC snap-in.<br />

In Microsoft SQL Server 2005, Enterprise Manager is replaced by SQL Server Management Studio, which provides<br />

a single interface to functionality provided by Enterprise Manager and Query Analyzer in Microsoft SQL Server<br />

2000.


Extensible Storage Engine 45<br />

Extensible Storage Engine<br />

Extensible Storage Engine (ESE), also known as JET Blue, is an Indexed Sequential Access Method (ISAM) data<br />

storage technology from Microsoft. ESE is notably a core of Microsoft Exchange Server and Active Directory. Its<br />

purpose is to allow applications to store and retrieve data via indexed and sequential access. Windows Mail and<br />

Desktop Search in the Windows Vista operating system also make use of ESE to store indexes and property<br />

information respectively.<br />

ESE provides transacted data update and retrieval. A crash recovery mechanism is provided so that data consistency<br />

is maintained even in the event of a system crash. Transactions in ESE are highly concurrent making ESE suitable<br />

for server applications. ESE caches data intelligently to ensure high performance access to data. In addition, ESE is<br />

lightweight making it suitable for auxiliary applications.<br />

The ESE Runtime (ESENT.DLL) has shipped in every Windows release since Windows 2000, with native x64<br />

version of the ESE runtime shipping with x64 versions of Windows XP and Windows Server 2003. Microsoft<br />

Exchange, up to Exchange 2003 shipped with only the 32 bit edition, as it was the only supported platform. With<br />

Exchange 2007, it ships with the 64 bit edition.<br />

<strong>Database</strong>s<br />

A database is both a physical and logical grouping of data. An ESE database looks like a single file to Windows.<br />

Internally the database is a collection of 2, 4, 8, 16, or 32 KB pages (16 and 32 KB page options are only available in<br />

Windows 7 and Exchange 2010), [1] arranged in a balanced B-tree structure. [2] These pages contain meta-data to<br />

describe the data contained within the database, data itself, indexes to persist interesting orders of the data, and other<br />

information. This information is intermixed within the database file but efforts are made to keep data used together<br />

clustered together within the database. An ESE database may contain up to 2 32 pages, or 16 terabytes of data, [3] for 8<br />

kilobyte sized pages.<br />

ESE databases are organized into groups called instances. Most applications use a single instance, but all<br />

applications can also use multiple instances. The importance of the instance is that it associates a single recovery log<br />

series with one or more databases. Currently, up to 6 user databases may be attached to an ESE instance at any time.<br />

Each separate process using ESE may have up to 1024 ESE instances.<br />

A database is portable in that it can be detached from one running ESE instance and later attached to the same or a<br />

different running instance. While detached, a database may be copied using standard Windows utilities. The database<br />

cannot be copied while it is being actively used since ESE opens database files exclusively. A database may<br />

physically reside on any device supported for directly-addressable I/O operations by Windows.<br />

Tables<br />

A table is a homogeneous collection of records, where each record has the same set of columns. Each table is<br />

identified by a table name, whose scope is local to the database in which the table is contained. The amount of disk<br />

space allocated to a table within a database is determined by a parameter given when the table is created with the<br />

CreateTable operation. Tables grow automatically in response to data creation.<br />

Tables have one or more indexes. There must be at least one clustered index for record data. When no clustered<br />

index is defined by the application, an artificial index is used which orders and clusters records by the chronological<br />

order of record insertion. Indexes are defined to persist interesting orders of data, and allow both sequential access to<br />

records in index order, and direct access to records by index column values. Clustered indexes in ESE must also be<br />

primary, meaning that the index key must be unique.


Extensible Storage Engine 46<br />

Clustered and non-clustered indexes are represented using B+trees. If an insert or update operation causes a page to<br />

overflow, the page is split: a new page is allocated and is logically chained in between the two previously adjacent<br />

pages. Since this new page is not physically adjacent to its logical neighbors, access to it is not as efficient. ESE has<br />

an on-line compaction feature that re-compacts data. If a table is expected to be frequently updated, space may be<br />

reserved for future insertions by specifying an appropriate page density when creating a table or index. This allows<br />

split operations to be avoided or postponed.<br />

Records and Columns<br />

A record is an associated set of column values. Records are inserted and updated via Update operations and can be<br />

deleted via Delete operations. Columns are set and retrieved via SetColumns and RetrieveColumns operations,<br />

respectively. The maximum size of a record is 8110 bytes for 8 kilobyte pages with the exception of long value<br />

columns. Column types of LongText and LongBinary do not contribute significantly to this size limitation, and<br />

records can hold data much larger than a database page size when data is stored in long value columns. When a long<br />

value reference is stored in a record, only 9 bytes of in-record data are required. These long values may themselves<br />

be up to 2 gigabytes (GB) in size.<br />

Records are typically uniform in that each record has a set of values for the same set of columns. In ESE, it is also<br />

possible to define many columns for a table, and yet have any given record contain only a small number of<br />

non-NULL column values. In this sense, a table can also be a collection of heterogeneous records.<br />

ESE supports a wide range of columns values, ranging in size from 1-bit to 2 GB. Choosing the correct column type<br />

is important because the type of a column determines many of its properties, including its ordering for indexes. The<br />

following data types are supported by ESE:<br />

Column Types<br />

Name Description<br />

Bit ternary value (NULL, 0, or 1)<br />

Unsigned Byte 1-byte unsigned integer<br />

Short 2-byte signed integer<br />

Unsigned Short 2-byte unsigned integer<br />

Long 4-byte signed integer<br />

Unsigned Long 4-byte unsigned integer<br />

LongLong 8-byte signed integer<br />

Currency 8-byte signed integer<br />

IEEE Single 4-byte floating-point number<br />

IEEE Double 8-byte floating-point number<br />

DateTime 8-byte date-time (integral date, fractional time)<br />

GUID 16-byte unique identifier<br />

Binary Binary string, length


Extensible Storage Engine 47<br />

Fixed, Variable and Tagged Columns<br />

Each ESE table can define up to 127 fixed length columns, 128 variable length columns and 64,993 tagged columns.<br />

• Fixed columns are essentially columns that take up the same amount of space in each record, regardless of their<br />

value. Fixed columns take up a 1-bit to represent NULLity of the column value and a fixed amount of space in<br />

each record in which that column, or a later defined fixed column, is set.<br />

• Variable columns are essentially columns that take up a variable amount of space in each record in which they are<br />

set, depending upon the size of the particular column value. Variable columns take up 2-bytes to determine<br />

NULLity and size, and a variable amount of space in each record in which that column is set.<br />

• Tagged columns are columns that take no space whatsoever if they are not set in a record. They may be single<br />

valued but can also be multi-valued. The same tagged column may have multiple values in a single record. When<br />

tagged columns are set in a record, each instance of a tagged column takes approximately 4-bytes of space in<br />

addition to the size of the tagged column instance value. When the number of instances of a single tagged column<br />

is large, the overhead per tagged column instance is approximately 2-bytes. Tagged columns are ideal for sparse<br />

columns because they take no space whatsoever if they are not set. If a multi-valued tagged column is indexed,<br />

the index will contain one entry for the record for each value of the tagged column.<br />

For a given table, columns fall into one of two categories: those which either occur exactly once in each of the<br />

records, with possibly a few NULL values; and those which occur rarely, or which may have multiple occurrences in<br />

a single record. Fixed and variable columns belong to the former category, while tagged columns belong to the latter.<br />

The internal representation of the two column categories is different, and it is important to understand the trade offs<br />

between the column categories. Fixed and variable columns are typically represented in every record, even when the<br />

occurrence has a NULL value. These columns can be quickly addressed via an offset table. Tagged column<br />

occurrences are preceded by a column identifier and the column is located by binary searching the set of tagged<br />

columns.<br />

Long Values<br />

Column types of Long Text and Long Binary are large binary objects. They are stored in separate B+tree from the<br />

clustered index keyed by long value id and byte offset. ESE supports append, byte range overwrite, and set size for<br />

these columns. Also, ESE has a single instance store feature where multiple records may reference the same large<br />

binary object, as though each record had its own copy of the information, i.e. without inter-record locking conflicts.<br />

The maximum size of a Long Text or Long Binary column value is 2 GB.<br />

Version, Auto-increment and Escrow Columns<br />

Version columns are automatically incremented by ESE each time a record containing this column is modified via an<br />

Update operation. This column cannot be set by the application, but can only be read. Applications of version<br />

columns include being used to determine if an in-memory copy of a given record needs to be refreshed. If the value<br />

in a table record is greater than the value in a cached copy then the cached copy is known to be out of date. Version<br />

columns must be of type Long.<br />

Auto increment columns are automatically set by ESE such that the value contained in the column is unique for<br />

every record in the table. These columns, like version columns, cannot be set by the application. Auto increment<br />

columns are read only, and are automatically set when a new record is inserted into a table via an Update operation.<br />

The value in the column remains constant for the life of the record, and only one auto increment column is allowed<br />

per table. Auto increment columns may be of type Long or type Currency .<br />

Escrow columns can be modified via an EscrowUpdate operation. Escrowed updates are numeric delta operations.<br />

Escrow columns must be of type Long. Examples of numeric delta operations include adding 2 to a value or<br />

subtracting 1 from a value. ESE tracks the change in a value rather than the end value of an update. Multiple sessions<br />

may each have outstanding changes made via EscrowUpdate to the same value because ESE can determine the


Extensible Storage Engine 48<br />

actual end value regardless of which transactions commit and which transactions rollback. This allows multiple users<br />

to concurrently update a column by making numeric delta changes.<br />

Indexes<br />

An index is a persisted ordering of records in a table. Indexes are used for both sequential access to rows in the order<br />

defined, and for direct record navigation based on indexed column values. The order defined by an index is<br />

described in terms of an array of columns, in precedence order. This array of columns is also called the index key.<br />

Each column is called an index segment. Each index segment may be either ascending or descending, in terms of its<br />

ordering contribution. Any number of indexes may be defined for a table. ESE provides a rich set of indexing<br />

features.<br />

Clustered Indexes<br />

One index may be specified as the clustered, or primary, index. In ESE, the clustered index must be unique and is<br />

referred to as the primary index. Other indexes are described as non-clustered, or secondary, indexes. Primary<br />

indexes are different from secondary indexes in that the index entry is the record itself, and not a logical pointer to<br />

the record. Secondary indexes have primary keys at their leaves to logically link to the record in the primary index.<br />

In other words, the table is physically clustered in primary index order. Retrieval of non-indexed record data in<br />

primary index order is generally much faster than in secondary index order. This is because a single disk access can<br />

bring into memory multiple records that will be access close together in time. The same disk access satisfies multiple<br />

record access operations. However, the insertion of a record into the middle of an index, as determined by the<br />

primary index order, may be very much slower than appending it to the end of an index. Update frequency must be<br />

carefully considered against retrieval patterns when performing table design. If no primary index is defined for a<br />

table, then an implicit primary index, called a database key (DBK) index is created. The DBK is simply a unique<br />

ascending number incremented each time a record is inserted. As a result, the physical order of records in a DBK<br />

index is chronological insertion order, and new records are always added at the end of the table. If an application<br />

wishes to cluster data on a non-unique index, this is possible by adding an autoincrement column to the end of the<br />

non-unique index definition.<br />

Indexing Over Multi-valued Columns<br />

Indexes can be defined over multi-valued columns. Multiple entries may exist in these indexes for records with<br />

multiple values for the indexed column. Multi-valued columns may be indexed in conjunction with single valued<br />

columns. When two or more multi-valued columns are indexed together, then the multi-valued property is only<br />

honored for the first multi-value column in the index. Lower precedence columns are treated as though they were<br />

single valued.<br />

Sparse Indexes<br />

Indexes can also be defined to be sparse. Sparse indexes do not have at least one entry for each record in the table.<br />

There are a number of options in defining a sparse index. Options exist to exclude records from indexes when an<br />

entire index key is NULL, when any key segment is NULL or when just the first key segment is NULL. Indexes can<br />

also have conditional columns. These columns never appear within an index but can cause a record not to be indexed<br />

when the conditional column is either NULL or non-NULL.


Extensible Storage Engine 49<br />

Tuple Indexes<br />

Indexes can also be defined to include one entry for each sub-string of a Text or Long Text column. These indexes<br />

are called tuple indexes. They are used to speed queries with sub-string matching predicates. Tuple indexes can only<br />

be defined for Text columns. For example, if a Text column value is “I love JET Blue”, and the index is configured to<br />

have a minimum tuple size of 4 characters and a maximum tuple length of 10 characters, then the following<br />

sub-strings will be indexed:<br />

“I love JET”<br />

“ love JET ”<br />

“love JET<br />

B”<br />

“ove JET<br />

Bl”<br />

“ve JET<br />

Blu”<br />

“e JET<br />

Blue”<br />

“ JET Blue”<br />

“JET Blue”<br />

“ET Blue”<br />

“T Blue”<br />

“ Blue”<br />

“Blue”<br />

Even though tuple indexes can be very large, they can significantly speed queries of the form: find all records<br />

containing “JET Blue”. They can be used for sub-strings longer than the maximum tuple length by dividing the<br />

search sub-string into maximum tuple length search strings and intersecting the results. They can be used for exact<br />

matches for strings as long as the maximum tuple length or as short as the minimum tuple length, with no index<br />

intersection. For more information on performing index intersection in ESE see Index Intersection. Tuple indexes<br />

cannot speed queries where the search string is shorter than the minimum tuple length.<br />

Transactions<br />

A transaction is a logical unit of processing delimited by BeginTransaction and CommitTransaction, or Rollback,<br />

operations. All updates performed during a transaction are atomic; they either all appear in the database at the same<br />

time or none appear. Any subsequent updates by other transactions are invisible to a transaction. However, a<br />

transaction can update only data that has not changed in the meantime; else the operation fails at once without<br />

waiting. Read-only transactions never need to wait, and update transactions can interfere only with one another<br />

updating transaction. Transactions which are terminated by Rollback, or by a system crash, leave no trace on the<br />

database. In general, the data state is restored on Rollback to what it was prior to BeginTransaction.<br />

Transactions may be nested up to 7 levels, with one additional level reserved for ESE internal use. This means that a<br />

part of a transaction may be rolled back, without need to roll back the entire transaction; a CommitTransaction of a<br />

nested transaction merely signifies the success of one phase of processing, and the outer transaction may yet fail.<br />

Changes are committed to the database only when the outermost transaction is committed. This is known as<br />

committing to transaction level 0. When the transaction commits to transaction level 0, data describing the<br />

transaction is synchronously flushed to the log to ensure that the transaction will be completed even in the event of a<br />

subsequent system crash. Synchronously flushing the log makes ESE transactions durable. However, in some cases<br />

application wish to order their updates, but not immediately guarantee that changes will be done. Here, applications<br />

can commit changes with JET_bitIndexLazyFlush.<br />

ESE supports a concurrency control mechanism called multi-versioning. In multi-versioning, every transaction<br />

queries a consistent view of the entire database as it was at the time the transaction started. The only updates it


Extensible Storage Engine 50<br />

encounters are those made by it. In this way, each transaction operates as though it was the only active transaction<br />

running on the system, except in the case of write conflicts. Since a transaction may make changes based on data<br />

read that has already been updated in another transaction, multi-versioning by itself does not guarantee serializable<br />

transactions. However, serializability can be achieved when desired by simply using explicit record read locks to<br />

lock read data that updates are based upon. Both read and write locks may be explicitly requested with the GetLock<br />

operation.<br />

In addition, an advanced concurrency control feature known as escrow locking is supported by ESE. Escrow locking<br />

is an extremely concurrent update where a numeric value is changed in a relative fashion, i.e. by adding or<br />

subtracting another numeric value. Escrow updates are non-conflicting even with other concurrent escrow updates to<br />

the same datum. This is possible because the operations supported are commutable and can be independently<br />

committed or rolled back. As a result, they do not interfere with concurrent update transactions. This feature is often<br />

used for maintained aggregations.<br />

ESE also extends transaction semantics from data manipulation operations to data definition operations. It is possible<br />

to add an index to a table and have concurrently running transactions update the same table without any transaction<br />

lock contention whatsoever. Later, when these transactions are complete, the newly created index is available to all<br />

transactions and has entries for record updates made by other transactions that could not perceive the presence of the<br />

index when the updates took place. Data definition operations may be performed with all the features expected of the<br />

transaction mechanism for record updates. Data definition operations supported in this fashion include AddColumn,<br />

DeleteColumn, CreateIndex, DeleteIndex, CreateTable and DeleteTable.<br />

Cursor Navigation and the Copy Buffer<br />

A cursor is a logical pointer within a table index. The cursor may be positioned on a record, before the first record,<br />

after the last record or even between records. If a cursor is positioned before or after a record, there is no current<br />

record. It is possible to have multiple cursors into the same table index. Many record and column operations are<br />

based on the cursor position. Cursor position can be moved sequentially by Move operations or directly using index<br />

keys with Seek operations. Cursors can also be moved to a fractional position within an index. In this way, the cursor<br />

can be quickly moved to a thumb bar position. This operation is performed with the same speed as a Seek operation.<br />

No intervening data must be accessed.<br />

Each cursor has a copy buffer in order to create a new record, or modify an existing record, column by column. This<br />

is an internal buffer whose contents can be changed with SetColumns operations. Modifications of the copy buffer<br />

do not automatically change the stored data. The contents of the current record can be copied into the copy buffer<br />

using the PrepareUpdate operation, and Update operations store the contents of the copy buffer as a record. The copy<br />

buffer is implicitly cleared on a transaction commit or rollback, as well as on navigation operations.<br />

RetrieveColumns may be used to retrieve column data either from the record or from the copy buffer, if one exists.<br />

Query Processing<br />

ESE applications invariably query their data. This section of the document describes features and techniques for<br />

applications to write query procession logic on ESE.<br />

Sorts and Temporary Tables<br />

ESE provides a sort capability in the form of temporary tables. The application inserts data records into the sort<br />

process one record at a time, and then retrieves them one record at a time in sorted order. Sorting is actually<br />

performed between the last record insertion and the first record retrieval. Temporary tables can be used for partial<br />

and complete result sets as well. These tables can offer the same features as base tables including the ability to<br />

navigate sequentially or directly to rows using index keys matching the sort definition. Temporary tables can also be


Extensible Storage Engine 51<br />

updatable for computation of complex aggregates. Simple aggregates can be computed automatically with a feature<br />

similar to sorting where the desired aggregate is a natural result of the sort process.<br />

Covering Indexes<br />

Retrieving column data directly from secondary indexes is an important performance optimization. Columns may be<br />

retrieved directly from secondary indexes, without accessing the data records, via the RetrieveFromIndex flag on the<br />

RetrieveColumns operation. It is much more efficient to retrieve columns from a secondary index, than from the<br />

record, when navigating by the index. If the column data were retrieved from the record, then an additional<br />

navigation is necessary to locate the record by the primary key. This may result in additional disk accesses. When an<br />

index provides all columns needed then it is called a covering index. Note that columns defined in the table primary<br />

index are also found in secondary indexes and can be similarly retrieved using<br />

JET_bitRetrieveFromPrimaryBookmark.<br />

Index keys are stored in normalized form which can be, in many cases, denormalized to the original column value.<br />

Normalization is not always reversible. For example, Text and Long Text column types cannot be denormalized . In<br />

addition, index keys may be truncated when column data is very long. In cases where columns cannot be retrieved<br />

directly from secondary indexes, the record can always be accessed to retrieve the necessary data.<br />

Index Intersection<br />

Queries often involve a combination of restrictions on data. An efficient means of processing a restriction is to use<br />

an available index. However, if a query involves multiple restrictions then applications often process the restrictions<br />

by walking the full index range of the most restrictive predicate satisfied by a single index. Any remaining predicate,<br />

called the residual predicate, is processed by applying the predicate to the record itself. This is a simple method but<br />

has the disdavantage of potentially having to perform many disk accesses to bring records into memory to apply the<br />

residual predicate.<br />

Index intersection is an important query mechanism in which multiple indexes are used together to more efficiently<br />

process a complex restriction. Instead using only a single index, index ranges on multiple indexes are combined to<br />

result in a much smaller number of records on which any residual predicate can be applied. ESE makes this easy by<br />

supplying an IntersectIndexes operation. This operation accepts a series of index ranges on indexes from the same<br />

table and returns a temporary table of primary keys that can be used to navigate to the base table records that satisfy<br />

all index predicates.<br />

Pre-joined Tables<br />

A join is a common operation on a normalized table design, where logically related data is brought back together for<br />

use in an application. Joins can be expensive operations because many data accesses may be needed to bring related<br />

data into memory. This effort can be optimized in some cases by defining a single base table that contains data for<br />

two or more logical tables. The column set of the base table is the union of the column sets of these logical tables.<br />

Tagged columns make this possible because of their good handling of both multi-valued and sparse valued data.<br />

Since related data is stored together in the same record, it is accessed together thereby minimizing the number of<br />

disk accesses to perform the join. This process can be extended to a large number of logical tables as ESE can<br />

support up to 64,993 tagged columns. Since indexes can be defined over multi-valued columns, it is still possible to<br />

index ‘interior’ tables. However, some limitations exist and applications should consider pre-joining carefully before<br />

employing this technique.


Extensible Storage Engine 52<br />

Logging and Crash Recovery<br />

The logging and recovery feature of ESE supports guaranteed data integrity and consistency in the event of a system<br />

crash. Logging is the process of redundantly recording database update operations in a log file. The log file structure<br />

is very robust against system crashes. Recovery is the process of using this log to restore databases to a consistent<br />

state after a system crash.<br />

Transaction operations are logged and the log is flushed to disk during each commit to transaction level 0. This<br />

allows the recovery process to redo updates made by transactions which commit to transaction level 0, and undo<br />

changes made by transactions which did not commit to transaction level 0. This type of recovery scheme is often<br />

referred to as a ‘roll-forward/roll-backward’ recovery scheme. Logs can be retained until the data is safely copied via<br />

a backup process described below, or logs can be reused in a circular fashion as soon as they are no longer needed<br />

for recovery from system crash. Circular logging minimizes the amount of disk space needed for the log but has<br />

implications on the ability to recreate a data state in the event of a media failure.<br />

Backup and Restore<br />

Logging and recovery also play a role in protecting data from media failure. ESE supports on-line backup where one<br />

or more databases are copied, along with log files in a manner that does not affect database operations. <strong>Database</strong>s<br />

can continue to be queried and updated while the backup is being made. The backup is referred to as a ‘fuzzy backup’<br />

because the recovery process must be run as part of backup restoration to restore a consistent set of databases. Both<br />

streaming and shadow copy backup are supported.<br />

Streaming backup is a backup method where copies of all desired database files and the necessary log files are made<br />

during the backup process. File copies may be saved directly to tape or can be made to any other storage device. No<br />

quiescing of activity of any kind is required with streamed backups. Both the database and log files are check<br />

summed to ensure that no data corruptions exist within the data set during the backup process. Streaming backups<br />

may also be incremental backups. Incremental backups are ones in which only the log files are copied and which can<br />

be restored along with a previous full backup to bring all databases to a recent state.<br />

Shadow copy backups are a new high speed backup method. Shadow copy backups are dramatically faster because<br />

the copy is virtually made after a brief period of quiescing an application. As subsequent updates are made to the<br />

data, the virtual copy is materialized. In some cases, hardware support for shadow copy backups means that actually<br />

saving the virtual copies is unnecessary. Shadow copy backups are always full backups.<br />

Restore can be used to apply a single backup, or it can be used to apply a combination of a single full backup with<br />

one or more incremental backups. Further, any existing log files can be replayed as well to recreate an entire data set<br />

all the way up to the last transaction logged as committed to transaction level 0. Restoration of a backup can be made<br />

to any system capable of supporting the original application. It need not be the same machine, or even the same<br />

machine configuration. Location of files can be changed as part of the restoration process.<br />

History<br />

JET Blue was originally developed by Microsoft as a prospective upgrade for the JET Red database engine in<br />

Microsoft Access, but was never used in this role. Instead, it went on to be used by Exchange Server, Active<br />

Directory, File Replication Service (FRS), Security Configuration Editor, Certificate Services, Windows Internet<br />

Name Service (WINS) and a host of other Microsoft services, applications and Windows components. [4] For years,<br />

it was a private API used by Microsoft only, but has become a published API that anyone can use.<br />

Work began on Data Access Engine (DAE) in March 1989 when Allen Reiter joined Microsoft. Over the next year a<br />

team of four developers worked for Allen to largely complete the ISAM. Microsoft already had the BC7 ISAM (JET<br />

Red) but began the Data Access Engine (DAE) effort to build a more robust database engine as an entry in the then<br />

new client-server architecture realm. In the spring of 1990, BC7 ISAM and DAE teams were joined to become the


Extensible Storage Engine 53<br />

Joint Engine Technology (JET) effort; responsible for producing two engines a v1 (JET Red) and a v2 (JET Blue)<br />

that would conform to the same API specification (JET API). DAE became JET Blue for the color of the flag of<br />

Israel. BC7 ISAM became JET Red for the color of the flag of Russia. While JET Blue and JET Red were written to<br />

the same API specification, they shared no ISAM code whatsoever. They did both support a common query<br />

processor, QJET, which later together with the BC7 ISAM became synonymous with JET Red.<br />

JET Blue first shipped in 1994 as an ISAM for WINS, DHCP, and the now defunct RPL services in Windows NT<br />

3.5. It shipped again as the storage engine for Microsoft Exchange in 1996. Additional Windows services chose JET<br />

Blue as their storage technology and by 2000 every version of Windows began to ship with JET Blue. JET Blue was<br />

used by Active Directory and became part of a special set of Windows code called the Trusted Computing Base<br />

(TCB). The number of Microsoft applications using JET Blue continues to grow and the JET Blue API was<br />

published in 2005 to facilitate usage by an ever increasing number of applications and services both within and<br />

beyond Windows.<br />

A Microsoft Exchange Web Blog entry [5] stated that developers who have contributed to JET Blue include Cheen<br />

Liao, Stephen Hecht, Matthew Bellew, Ian Jose, Edward "Eddie" Gilbert, Kenneth Kin Lum, Balasubramanian<br />

Sriram, Jonathan Liem, Andrew Goodsell, Laurion Burchall, Andrei Marinescu, Adam Foxman, Ivan Trindev,<br />

Spencer Low and Brett Shirley.<br />

Comparison to JET Red<br />

While they share a common lineage, there are vast differences between JET Red and ESE.<br />

• JET Red is a file sharing technology, while ESE is designed to be embedded in a server application, and does not<br />

share files.<br />

• JET Red makes best effort file recovery, while ESE has write ahead logging and snapshot isolation for guaranteed<br />

crash recovery.<br />

• JET Red before version 4.0 supports only page level locking, while ESE and JET Red version 4.0 supports record<br />

level locking.<br />

• JET Red supports a wide variety of query interfaces, including ODBC and OLE DB. ESE does not ship with a<br />

query engine but instead relies on applications to write their own queries as C ISAM code.<br />

• JET Red has a maximum database file size of 2 GiB, while ESE has a maximum database file size of 8 TiB with 4<br />

KiB pages, and 16 TiB with 8 KiB pages.<br />

References<br />

[1] In this context 1 KB = 1024 B<br />

[2] "Extensible Storage Engine Architecture" (http:/ / technet. microsoft. com/ en-us/ library/ bb310772. aspx). TechNet. . Retrieved 2007-06-18.<br />

[3] In this context 1 TB = 1024 4 B<br />

[4] Extensible Storage Engine (http:/ / www. microsoft. com/ technet/ prodtechnol/ windows2000serv/ reskit/ distrib/ dsbi_add_ttpn.<br />

mspx?mfr=true)<br />

[5] "Here is your citation, Wikipedia" (http:/ / msexchangeteam. com/ archive/ 2008/ 12/ 18/ 450307. aspx). . Retrieved 2008-12-19.<br />

• "Exchange Terminology" (http:/ / www. techgalaxy. net/ Docs/ Exchange/ Exchange 2000 Acronyms and<br />

Terminology. htm). Retrieved 2007-06-18.<br />

• "Extensible Storage Engine" (http:/ / msdn. microsoft. com/ en-us/ library/ ms684493. aspx). Retrieved<br />

2009-01-18.<br />

• "Understanding Information Store Essentials" (http:/ / www. messagingtalk. org/ content/ 227. html). Retrieved<br />

2007-06-18.<br />

• "Extensible Storage Engine Reference" (http:/ / msdn. microsoft. com/ en-us/ library/ ms683072. aspx). Retrieved<br />

2009-01-18.


Extensible Storage Engine 54<br />

External links<br />

• iiobo ESE Library (http:/ / www. iiobo. com/ ExtensibleStorageEngine. aspx) - a C++ ESE library, toolkit and<br />

sample application using C#<br />

• ManagedEsent (http:/ / www. codeplex. com/ ManagedEsent) - a .NET managed interop library<br />

FoxPro 2<br />

FoxPro is a text-based procedurally-oriented programming language and<br />

DB<strong>MS</strong>, originally published by Fox <strong>Software</strong> and later by Microsoft, for<br />

<strong>MS</strong>-DOS, <strong>MS</strong> Windows, Apple Macintosh, and UNIX.<br />

Although FoxPro is a <strong>Database</strong> Management System (DB<strong>MS</strong>) and it does<br />

support relationships between tables, it is not considered a Relational<br />

<strong>Database</strong> Management System (RDB<strong>MS</strong>), lacking transactional processing.<br />

The final published release of FoxPro was 2.6, after which the name was<br />

changed to Visual FoxPro.<br />

Although no longer sold or supported by Microsoft, there is still an active<br />

worldwide community of FoxPro users and programmers. FoxPro 2.6 for<br />

UNIX (FPU26) has even been successfully installed on Linux and FreeBSD<br />

using the Intel Binary Compatibility Standard (ibcs2) support library.<br />

Version information<br />

Microsoft FoxPro running on Macintosh System 7.1<br />

Operating system compatibility<br />

Cover of the FoxPro 2.6 Developers<br />

Guide


FoxPro 2 55<br />

Technical aspects<br />

Version FP 2.0 FP 2.5 FP 2.6<br />

<strong>MS</strong>-DOS Yes Yes Yes<br />

Windows 3.1 to<br />

XP<br />

Yes Yes Yes<br />

Macintosh Yes Yes Yes<br />

SCO UNIX No No Yes<br />

Linux & FreeBSD No No<br />

Yes [1]<br />

Windows 2000 No No Yes<br />

FoxPro 2 included "Rushmore" optimizing engine, which used indices to accelerate data retrieval and updating.<br />

Rushmore technology examined every data-related statement, and looked for filter expressions. If one was used, it<br />

looked for an index matching the same expression.<br />

In addition, FoxPro2 was originally built on WatCOM C++, which had its own memory extensor - at that time<br />

state-of-the-art. FoxPro2 could access expanded and extended memory, using almost all available RAM (DOS). It<br />

used some interrupts in absence of the extended memory driver: if no HIMEM.SYS was loaded, FoxPro enabled that<br />

mechanism.<br />

Version Timeline<br />

External links<br />

• History of FoxPro - Timeline [2]<br />

• A site devoted to the history of FoxPro [3]<br />

Version VERSION() returns EXE<br />

Size<br />

EXE Date<br />

FPW 2.6a FoxPro 2.6a for Windows 2,444 kb 28-SEP-1994<br />

FPM 2.6a FoxPro 2.6a for Macintosh ? kb August 1994<br />

FPD 2.6a FoxPro 2.6a for DOS 1,788 kb August 1994<br />

FPW 2.6 FoxPro 2.6 for Windows 2.38 Mb 9 March 1994<br />

FPM 2.6 FoxPro 2.6 for Macintosh ? kb 1993<br />

FPD 2.6 FoxPro 2.6 for DOS ? kb March 1994<br />

FPU 2.6 FoxPro 2.6 for UNIX 2.3 Mb 1993<br />

FPW 2.5 FoxPro 2.5 for Windows 1.63 Mb Jan. 1993<br />

FPD 2.0 FoxPro 2.0 for DOS 465.86 kb 1991<br />

• Virtual FoxPro User Group [4] - Free online support resource<br />

• Microsoft: FoxPro (old versions 1 to 2.6) Forum [5] - Free online support resource<br />

• FoxPro FAQs [6]<br />

• User-defined functions FoxPro 2.6 DOS (written in C) [7]


FoxPro 2 56<br />

References<br />

[1] using the ibcs files from the Linux ABI project at Sourceforge.<br />

[2] http:/ / www. foxprohistory. org/ foxprotimeline. htm<br />

[3] http:/ / www. foxprohistory. org/<br />

[4] http:/ / www. vfug. org/<br />

[5] http:/ / www. tek-tips. com/ threadminder. cfm?pid=182<br />

[6] http:/ / www. intergate. com/ ~dallen24/<br />

[7] http:/ / www. universalthread. com/ Report.<br />

aspx?Session=6633617A53617371576A493D20476E7430355250344D4843734336516C30675231585253714C555579344A5955<br />

Microsoft Jet <strong>Database</strong> Engine<br />

The Microsoft Jet <strong>Database</strong> Engine is a database engine on which several Microsoft products have been built. A<br />

database engine is the underlying component of a database, a collection of information stored on a computer in a<br />

systematic way. The first version of Jet was developed in 1992, consisting of three modules which could be used to<br />

manipulate a database.<br />

JET stands for Joint Engine Technology, sometimes being referred to as Microsoft JET Engine or simply Jet.<br />

Microsoft Access and Visual Basic use or have used Jet as their underlying database engine. It has since been<br />

superseded for general use, however, first by Microsoft Desktop Engine (<strong>MS</strong>DE), then later by SQL Server 2005<br />

Express Edition and most recently by SQL Server 2005 Compact Edition. Jet is now part of Microsoft Windows and<br />

is no longer a component of Microsoft Data Access Components (MDAC). For larger database needs, Jet databases<br />

can be upgraded (or, in Microsoft parlance, "up-sized") to Microsoft's flagship database product, SQL Server 2005.<br />

Over the years, Jet has become almost synonymous with Microsoft Access, to the extent where many people<br />

incorrectly refer to a Jet database as an "Access database". Even Microsoft employees do this sometimes, but this<br />

nomenclature should always be seen as incorrect. Jet is a database and Access is a database application development<br />

tool (database builder).<br />

Architecture<br />

Jet allows the manipulation of a relational database and is part of a Relational <strong>Database</strong> Management System<br />

(RDB<strong>MS</strong>). It offers a single interface that other software can use to access Microsoft databases and provides support<br />

for security, referential integrity, transaction processing, indexing, record and page locking, and data replication. In<br />

later versions, the engine has been extended to be able to run SQL queries, store character data in Unicode format,<br />

create database views and allow bi-directional replication with Microsoft SQL Server.<br />

There are three modules to Jet: One is the<br />

Native Jet ISAM Driver, a dynamic link<br />

library (DLL) that can directly manipulate<br />

Microsoft Access database files (MDB)<br />

using Indexed Sequential Access Method<br />

(ISAM). Another one of the modules<br />

contains the ISAM Drivers, DLLs that allow<br />

access to a variety of ISAM databases,<br />

among them Xbase, Paradox, Btrieve and<br />

FoxPro, depending on the version of Jet.<br />

The final module is the Data Access Objects<br />

Jet DLLs<br />

(DAO) DLL. DAO provides an API that allows programmers to access JET databases using any programming<br />

language.


Microsoft Jet <strong>Database</strong> Engine 57<br />

Locking<br />

Jet allows multiple users to access the database concurrently. To prevent that data from being corrupted or<br />

invalidated when multiple users try to write to the database, Jet employs a data write locking policy. Any single user<br />

can only modify those database records (that is, items in the database) to which they have applied a lock that gives<br />

them exclusive access to the record until the lock is released. Up to Jet 4, a page locking model was used, and in Jet<br />

4 a record locking model is employed. Microsoft databases are organized into data "pages", which are fixed length<br />

(2 kB before Jet 4, 4 kB in Jet 4) data structures that divide up the database. Data is stored in "records", but these are<br />

of variable length and so may take up less or more than one page. The page locking model worked by locking the<br />

pages, instead of individual records, which though less resource intensive also meant that more than one record<br />

might be locked at any one time.<br />

There were two mechanisms that Microsoft uses for locking: pessimistic locking, and optimistic locking. With<br />

pessimistic locking, the record or page is locked immediately when the lock is requested, while with optimistic<br />

locking, the update is delayed until all the editing operations on the record have been completed. Conflicts are less<br />

likely to occur with optimistic locking, since the record is locked only for a short period of time. However, with<br />

optimistic locking one cannot be certain that the update will succeed because another user could update the record<br />

first. With pessimistic locking, the update is guaranteed to succeed once the lock is obtained. Other users must wait<br />

until the update is made and the lock released in order to make their changes. Lock conflicts, which either require the<br />

user to wait, or cause the request to fail (usually after a timeout) are more common with pessimistic locking.<br />

Transaction processing<br />

Jet supports transaction processing for database systems that have this capability (ODBC systems have one level<br />

transaction processing, while several ISAM systems like Paradox do not have transaction processing capability). A<br />

transaction is a series of operations performed on a database that must be done together — this is known as atomicity<br />

and is a part of ACID (Atomicity, Consistency, Isolation, and Durability), concepts considered to be the key<br />

transaction processing features of a database management system. For transaction processing to work (until Jet 3.0),<br />

the programmer needed to begin the transaction manually, perform the operations needed to be performed in the<br />

transaction, and then commit (save) the transaction. Until the transaction is committed, changes are made only in<br />

memory and not actually written to disk. TransactionMemory Transactions have a number of advantages over<br />

independent database updates. One of the main advantages is that transactions can be abandoned if a problem occurs<br />

during the transaction. This is called rolling back the transaction, or just rollback, and it restores the state of the<br />

database records to precisely the state before the transaction began. Transactions also permit the state of the database<br />

to remain consistent if a system failure occurs in the middle of a sequence of updates required to be atomic. There is<br />

no chance that only some of the updates will end up written to the database; either all will succeed, or the changes<br />

will be discarded when the database system restarts. With ODBC's in-memory policy, transactions also allow for<br />

many updates to a record to occur entirely within memory, with only one expensive disk write at the end.<br />

Implicit transactions were supported in Jet 3.0. These are transactions that are started automatically after the last<br />

transaction was committed to the database. Implicit transactions in Jet occurred when an SQL DML statement was<br />

issued. However, it was found that this had a negative performance impact in 32 bit Windows (Windows 95,<br />

Windows 98), so in Jet 3.5 Microsoft removed implicit transactions when SQL DML statements were made.<br />

JET 4.0


Microsoft Jet <strong>Database</strong> Engine 58<br />

Data integrity<br />

Jet enforces entity integrity and referential integrity.<br />

Entity integrity is one of the key concepts of relational<br />

databases, and ensures that no record is able to be<br />

duplicated and also ensures that no field (or group of<br />

fields) that identify the record (the primary key) are<br />

NULL. Thus, Jet supports primary keys. Referential<br />

integrity is where the fields that identify data that exist<br />

in a database table (the foreign key) must correspond<br />

with an existing primary key in that database. If a<br />

foreign key value exists that does not have a<br />

corresponding primary key in the referenced table, then<br />

the referential integrity is broken and the data between<br />

tables will no longer be synchronised.<br />

For instance, a music lover may have a database that<br />

stores information about a record collection, and need<br />

to store data about an artist and his/her music. In this<br />

example, the artist can record many albums, but the<br />

album is only recorded by one artist, so two database<br />

tables are created: Artist and Album. The Artist table<br />

uses the field artist_id as its primary key, and the<br />

Album table uses album_id. The album table references<br />

An example of a database that has not enforced referential integrity.<br />

In this example, there is a foreign key (artist_id) value in the album<br />

table that references a non-existent artist — in other words there is a<br />

foreign key value with no corresponding primary key value in the<br />

referenced table. What happened here was that there was an artist<br />

called "Aerosmith", with an artist_id of "4", which was deleted from<br />

the artist table. However, the album Eat the rich referred to this artist.<br />

With referential integrity enforced, this would not have been<br />

possible.<br />

the artist table using artist_id as a foreign key. If, for some reason, an artist is deleted and there is an album in the<br />

system that contains a reference to that artist then the referential integrity of this record would be broken. Jet will by<br />

default prevent this from happening. Jet is also capable of doing cascading updates and deletes. With cascading<br />

deletes enabled for the Album table, if the artist in the previous example were deleted, then all the artists' albums<br />

would also be deleted.<br />

Jet also supports "business rules" (also known as "constraints"), or rules that apply to any column to enforce what<br />

data might be placed into the table or column. For example, a rule might be applied that does not allow a date to be<br />

entered into a date_logged column that is earlier than the current date and time, or a rule might be applied that forces<br />

people to enter a positive value into a numeric only field.<br />

Security<br />

Access to Jet databases is done on a per user-level. The user information is kept in a separate system database, and<br />

access is controlled on each object in the system (for instance by table or by query). In Jet 4, Microsoft implemented<br />

functionality that allows database administrators to set security via the SQL commands CREATE, ADD, ALTER,<br />

DROP USER and DROP GROUP. These commands are a subset of ANSI SQL 92 standard, and they also apply to<br />

the GRANT/REVOKE commands. [1] When Jet 2 was released, security could also be set programmatically through<br />

DAO.


Microsoft Jet <strong>Database</strong> Engine 59<br />

Queries<br />

Queries are the mechanisms that Jet uses to retrieve data from the database. They can be defined in Microsoft QBE<br />

(Query By Example), through the Microsoft Access SQL Window or through Access Basic's Data Access Objects<br />

(DAO) language. These are then converted to an SQL SELECT statement. The query is then compiled — this<br />

involves parsing the query (involves syntax checking and determining the columns to query in the database table),<br />

then converted into an internal Jet query object format, which is then tokenized and organised into a tree like<br />

structure. In Jet 3.0 onwards these are then optimised using the Microsoft Rushmore query optimisation technology.<br />

The query is then executed and the results passed back to the application or user who requested the data.<br />

Jet passes the data retrieved for the query in a dynaset. This is a set of data that is dynamically linked back to the<br />

database. Instead of having the query result stored in a temporary table, where the data cannot be updated directly by<br />

the user, the dynaset allows the user to view and update the data contained in the dynaset. Thus, if a university<br />

lecturer queries all students who received a distinction in their assignment and finds an error in that student's record,<br />

they would only need to update the data in the dynaset, which would automatically update the student's database<br />

record without the need for them to send a specific update query after storing the query results in a temporary table.<br />

History<br />

Jet<br />

version<br />

Jet engine DLL file name MDB version<br />

1.0 ?? ?? 1.0<br />

1.1 1.10.0001 <strong>MS</strong>AJT110.DLL 1.0 / 1.1<br />

2.0 2.00.0000 <strong>MS</strong>AJT200.DLL 1.0 / 1.1 / 2.0<br />

2.5 2.50.1606 <strong>MS</strong>AJT200.DLL 1.0 / 1.1 / 2.0<br />

3.0 3.0.0.2118 <strong>MS</strong>JT3032.DLL 1.0 / 1.1 / 2.0 / 3.0<br />

3.5 ?? <strong>MS</strong>JET35.DLL 1.0 / 1.1 / 2.0 / 3.0<br />

4.0 SP8 4.0.8015.0 <strong>MS</strong>JET40.DLL 1.0 / 1.1 / 2.0 / 3.0 / 4.0<br />

ACE 12.0 12.0.xxxx.xxxx ACECORE.DLL 1.0 / 1.1 / 2.0 / 3.0 / 4.0 / ACE<br />

ACE 14.0 14.0.xxxx.xxxx ACECORE.DLL 3.0 / 4.0 / ACE<br />

Sources:<br />

• [2]<br />

• [3]<br />

• [4]<br />

Application/Version Jet version<br />

Microsoft Access 1.0 1.0<br />

Microsoft Access 1.1 1.1<br />

Microsoft Access 2.0 2.0<br />

Microsoft Access 2.0 Service Pack 2.5<br />

Microsoft Access 95 / Excel 95 3.0<br />

Microsoft Access 97 / Excel 97 / PowerPoint 97 / Word<br />

97<br />

Microsoft Access 2000 4.0 SP1<br />

Microsoft Access 2002<br />

3.5<br />

[5]


Microsoft Jet <strong>Database</strong> Engine 60<br />

Microsoft Access 2003 –<br />

Microsoft Access 2007 ACE 12.0<br />

Microsoft Access 2010 ACE 14.0<br />

Visual Basic 3.0 1.1<br />

Visual Basic Compatibility Layer 2.0<br />

Visual Basic 4.0 16-bit 2.5<br />

Visual Basic 4.0 32-bit 3.0<br />

Visual Basic 5.0 3.5<br />

Visual C++ 4.X 3.0<br />

Visual C++ 5.0 3.5<br />

Microsoft Project 4.1 / Project 95 3.0<br />

Internet Information Server 3.0 3.5<br />

SQL Server 7.0 4.0<br />

Redistributable installers<br />

Jet 3.51 web download 3.5+<br />

MDAC 2.1 4.0 SP1<br />

MDAC 2.5 4.0 SP3 to SP6+<br />

Jet 4.0 4.0 SP3 to SP8<br />

2007 Office System Driver ACE 12.0<br />

Microsoft Access <strong>Database</strong> Engine 2010 ACE 14.0<br />

Operating systems<br />

Windows Me 4.0 SP3<br />

Windows 2000 4.0 SP3<br />

Windows XP 4.0 SP5+<br />

Windows Server 2003 4.0 SP6+<br />

Windows Vista 4.0 SP8+<br />

Windows Server 2008 4.0 SP8+<br />

Windows 7 4.0 SP8+<br />

Sources:<br />

• Microsoft Jet <strong>Database</strong> Engine Programmer's Guide - Introduction [6]<br />

• INFO: Identifying the Jet <strong>Database</strong> Engine Components [2]<br />

• Microsoft Data Access Components (MDAC) release history [7]<br />

• Release manifest for MDAC 2.1 (2.1.1.3711.11) (GA) [8]<br />

• INFO: MDAC Version 2.6 and Later Do Not Contain Jet or Desktop ODBC Drivers [9]<br />

• Release manifest for MDAC 2.5 Service Pack 3 (2.53.6200.2) [10]<br />

• Wrong Autonumber [11]<br />

• How to obtain the latest service pack for the Microsoft Jet 4.0 <strong>Database</strong> Engine [4]<br />

Jet originally started in 1992 as an underlying data access technology that came from a Microsoft internal database<br />

product development project, code named Cirrus. Cirrus was developed from a pre-release version of Visual Basic<br />

code and was used as the database engine of Microsoft Access. Tony Goodhew, who worked for Microsoft at the<br />

time, says


Microsoft Jet <strong>Database</strong> Engine 61<br />

"It would be reasonably accurate to say that up until that stage Jet was more the name of the team that<br />

was assigned to work on the DB engine modules of Access rather than a component team. For VB<br />

[Visual Basic] 3.0 they basically had to tear it out of Access and graft it onto VB. That's why they've had<br />

all those Jet/ODBC problems in VB 3.0."<br />

Jet became more componentised when Access 2.0 was released because the Access ODBC developers used parts of<br />

the Jet code to produce the ODBC driver. A retrofit was provided that allowed Visual Basic 3.0 users to use the<br />

updated Jet issued in Access 2.0. [12]<br />

Jet 2.0 was released as several dynamic linked libraries (DLLs) that were utilised by application software, such as<br />

Microsoft's Access database. DLLs in Windows are "libraries" of common code that can be used by more than one<br />

application—by keeping code that more than one application uses under a common library which each of these<br />

applications can use independently code maintenance is reduced and the functionality of applications increases, with<br />

less development effort. The three DLLs that were comprised by Jet 2.0 were the Jet DLL, the Data Access Objects<br />

(DAO) DLL and several external ISAM DLLs. The Jet DLL determined what sort of database it was accessing, and<br />

how to perform what was requested of it. If the data source was an MDB file (a Microsoft Access format) then it<br />

would directly read and write the data to the file. If the data source was external, then it would call on the correct<br />

ODBC driver to perform its request. The DAO DLL was a component that programmers could use to interface with<br />

the Jet engine, and was mainly used by Visual Basic and Access Basic programmers. The ISAM DLLs were a set of<br />

modules that allowed Jet to access three ISAM based databases: Xbase, Paradox and Btrieve. MicrosoftJet2Overview<br />

Jet 3.0 included many enhancements, including a new index structure that reduced storage size and the time that was<br />

taken to create indices that were highly duplicated, the removal of read locks on index pages, a new mechanism for<br />

page reuse, a new compacting method for which compacting the database resulted in the indices being stored in a<br />

clustered-index format, a new page allocation mechanism to improve Jet's read-ahead capabilities, improved delete<br />

operations that speeded processing, multithreading (three threads were used to perform read ahead, write behind, and<br />

cache maintenance), implicit transactions (users did not have to instruct the engine to start manually and commit<br />

transactions to the database), a new sort engine, long values (such as memos or binary data types) were stored in<br />

separate tables, and dynamic buffering (whereby Jet's cache was dynamically allocated at start up and had no limit<br />

and which changed from a first in, first out (FIFO) buffer replacement policy to a least recently used (LRU) buffer<br />

replacement policy). [13] Jet 3.0 also allowed for database replication.<br />

Jet 4.0 gained numerous additional features and enhancements. [1]<br />

• Unicode character storage support, along with an NT sorting method that was also implemented in the Windows<br />

95 version;<br />

• Changes to data types to be more like SQL Server's (LongText or Memo; Binary; LongBinary; Date/Time; Real;<br />

Float4; IEEESingle; Double; Byte or Tinyint; Integer or Integer synonyms Smallint, Integer2, and Short;<br />

LongInteger or LongInteger synonyms Int, Integer, and Counter; Auto-Increment support was dropped; Currency<br />

or Money; Boolean and GUID); a new decimal data type<br />

• Memo fields could now be indexed<br />

• Compressible data types<br />

• SQL enhancements to make Jet conform more closely to ANSI SQL-92<br />

• Finer grained security; views support; procedure support<br />

• Invocation and termination (committing or rolling back) of transactions<br />

• Enhanced table creation and modification<br />

• Referential integrity support<br />

• Connection control (connected users remain connected, but once disconnected they cannot reconnect, and new<br />

connections cannot be made. This is useful for database administrators to gain control of the database)<br />

• A user list, which allows administrators to determine who is connected to the database<br />

• Record-level locking (previous versions only supported page-locking)


Microsoft Jet <strong>Database</strong> Engine 62<br />

• Bi-directional replication with <strong>MS</strong> SQL Server.<br />

Jet 4 databases can be "upsized" (upgraded) to "an equivalent database on SQL Server with the same table structure,<br />

data, and many other attributes of the original database" if the developer has a copy of Microsoft Office 2000<br />

Professional Edition via a Microsoft Access Upsizing Wizard utility. Reports, queries, macros and security are not<br />

handled by this tool, meaning that some manual modifications may need to be done if the developer has been heavily<br />

reliant on these Jet features. [14]<br />

Jet has been included in every version of Windows from Windows 2000 to Windows 7, and therefore is no longer<br />

distributed separately with the Microsoft Data Access Components (MDAC). Access 2003 relied on the Jet engine<br />

component of the operating system for its data storage and query processing. [15]<br />

With version 2007 onwards, Access includes an Office-specific version of Jet, initially called the Office Access<br />

Connectivity Engine (ACE), but which is now called the Access <strong>Database</strong> Engine. This engine is fully<br />

backward-compatible with previous versions of the Jet engine, so it reads and writes (.mdb) files from earlier Access<br />

versions. It introduces a new default file format, (.accdb), that brings several improvements to Access, including<br />

complex data types such as multivalue fields, the attachment data type and history tracking in memo fields. It also<br />

brings security and encryption improvements and enables integration with Microsoft Windows SharePoint Services<br />

[16] [17] [18]<br />

3.0 and Microsoft Office Outlook 2007.<br />

The engine in Microsoft Access 2010 discontinued support for Access 1.0, Access 2.0, Lotus 1-2-3 and Paradox<br />

files. [19] A 64-bit version of the ACE Driver/Provider has been introduced, which in essence provides a 64-bit<br />

version of Jet. The driver is not part of the Windows operating system, but is available as a redistributable. [20]<br />

Previously the Jet <strong>Database</strong> Engine was only 32-bit and did not run natively under 64-bit versions of Windows. This<br />

meant that native 64-bit applications (such as the 64-bit versions of SQL Server) could not access data stored in<br />

MDB files through ODBC, OLE DB, or any other means, except through intermediate 32-bit software (running in<br />

WoW64) that acted as a proxy for the 64 bit client. [21]<br />

From a data access technology standpoint, Jet is considered a deprecated technology by Microsoft, but it is an<br />

intrinsic part of Windows, and therefore Microsoft continues to support it. [22]<br />

References<br />

[1] <strong>MS</strong> KB article 275561 (2007-01-29). "Description of the new features that are included in Microsoft Jet 4.0" (http:/ / support. microsoft. com/<br />

kb/ 275561/ en). Microsoft. . Retrieved 2008-06-19.<br />

[2] http:/ / support. microsoft. com/ kb/ 178880/ en<br />

[3] http:/ / support. microsoft. com/ kb/ 282010/ en<br />

[4] http:/ / support. microsoft. com/ kb/ 239114/ en<br />

[5] The Access 2002 setup program only updates system files on certain versions of Windows and to a certain level.<br />

[6] http:/ / technet. microsoft. com/ en-us/ library/ cc966378. aspx<br />

[7] http:/ / support. microsoft. com/ kb/ 231943/ en<br />

[8] http:/ / support. microsoft. com/ kb/ 842279/ en<br />

[9] http:/ / support. microsoft. com/ kb/ 271908/ en<br />

[10] http:/ / support. microsoft. com/ kb/ 842176/ en<br />

[11] http:/ / groups. google. co. uk/ group/ microsoft. public. access. gettingstarted/ msg/ 84584fde3ef99112?hl=en<br />

[12] Goodhew, Tony (11 1996). "Jet Engine: History" (http:/ / www. avdf. com/ nov96/ acc_jet. html). . Retrieved 2008-06-19.<br />

[13] <strong>MS</strong> KB article 137039 (2003-12-03). "New Features in Microsoft Jet Version 3.0" (http:/ / support. microsoft. com/ kb/ 137039/ en).<br />

Microsoft. . Retrieved 2008-06-19.<br />

[14] Microsoft, "Microsoft Access 2000 Data Engine Options", white paper.<br />

[15] <strong>MS</strong> KB article 239114 (2008-05-29). "How to obtain the latest service pack for the Microsoft Jet 4.0 <strong>Database</strong> Engine" (http:/ / support.<br />

microsoft. com/ kb/ 239114/ en). Microsoft. . Retrieved 2010-01-02.<br />

[16] Aleksandar Jakšić (08 2008). "Developing Access 2007 Solutions with Native C or C++" (http:/ / msdn. microsoft. com/ en-us/ library/<br />

cc811599. aspx). Microsoft Corporation. . Retrieved 2008-08-26.<br />

[17] Andy Baron, Optimizing Microsoft Office Access Applications Linked to SQL Server (http:/ / msdn. microsoft. com/ en-us/ library/<br />

bb188204(SQL. 90). aspx), November 2006.<br />

[18] Microsoft, New features of the Access 2007 file format (http:/ / office. microsoft. com/ en-us/ access/ HA100678311033. aspx).


Microsoft Jet <strong>Database</strong> Engine 63<br />

[19] Microsoft, Discontinued features and modified functionality in Access 2010 (http:/ / office2010. microsoft. com/ en-gb/ access-help/<br />

discontinued-features-and-modified-functionality-in-access-2010-HA101806473. aspx?CTT=1).<br />

[20] Adam W. Saxton, Microsoft SQL Server Escalation Services (21 01 2010). "How to get a x64 version of Jet?" (http:/ / blogs. msdn. com/<br />

psssql/ archive/ 2010/ 01/ 21/ how-to-get-a-x64-version-of-jet. aspx). . Retrieved 2010-02-06.<br />

[21] Gorm Braarvig. "Access database from SQL 2005/64" (http:/ / gorm-braarvig. blogspot. com/ 2005/ 11/ access-database-from-sql-200564.<br />

html). . Retrieved 2007-06-18.<br />

[22] Shirolkar, Prash; Henry, Alyssa; Pepitone, Stephen; Bunch, Acey J.; (01 2008). "Data Access Technologies Road Map" (http:/ / msdn.<br />

microsoft. com/ en-us/ library/ ms810810. aspx). Microsoft Corporation. . Retrieved 2008-06-19.<br />

Report Definition Language<br />

Report Definition Language (RDL) is a standard proposed by Microsoft for defining reports.<br />

RDL is an XML application primarily used with Microsoft SQL Server Reporting Services. RDL is usually written<br />

using Visual Studio, although there are also third-party tools; it may also be created or edited by hand in a text editor.<br />

SQL Server Reporting Services or other 3rd party reporting frameworks use RDL to define charts, graphs,<br />

calculations, text, images (through links) and other report objects and render them in a variety of formats.<br />

There are three high-level sections in a typical RDL file:<br />

• Page style - The objects to display including fields, images, graphs, tables.<br />

• Field definitions - The extended attributes of fields which are populated with formulas, dynamic data, or <strong>Database</strong><br />

derived data.<br />

• Parameters and <strong>Database</strong> connections - Parameters that may be furnished by the user or passed in from another<br />

application; and database connections and queries for pulling data into the report.<br />

External links<br />

• Report Definition Language Specification [1]<br />

References<br />

[1] http:/ / msdn. microsoft. com/ en-us/ library/ dd297486. aspx


Upsizing (database) 64<br />

Upsizing (database)<br />

Upsizing is the term coined by Microsoft to describe the process of upgrading Microsoft Access <strong>Database</strong> to a<br />

Microsoft SQL Server. This allows to continue using Microsoft Access as a database front-end whereas the actual<br />

back-end is served by a separate local or remote SQL Server allowing much higher productivity and data volumes.<br />

Microsoft Access from the version 2000 on has a special Upsizing Wizard which facilitates the data migration to the<br />

proprietary Microsoft SQL Server. No other RDB<strong>MS</strong> are currently supported for upsizing.<br />

Upsizing strategies<br />

There are two strategies how database can be migrated from Access to a SQL Server.<br />

1. Using ODBC from Microsoft to get access to a remote database via ADO.<br />

2. Using Access Projects (available in Microsoft Access 2000 and higher) which allow more "native" integration<br />

with Microsoft SQL Server.<br />

The first strategy is often seen as the first step towards complete migration on a SQL server on the stage 2 [1] , and<br />

can be seen as a part of the strategy 2. For peculiarities of every strategy see the table.<br />

Parameter Strategy 1 Strategy 2<br />

<strong>Database</strong><br />

access<br />

Via ODBC using ADO, somewhat slower<br />

than strategy 2.<br />

Integration Can be integrated with (almost) any<br />

The role of<br />

Access<br />

RDB<strong>MS</strong><br />

Serves as database front-end with full<br />

features of Microsoft Access JET Engine<br />

and VBA. (compare to thick client)<br />

Performing the upsizing<br />

Native integration with Microsoft SQL Server using Access Project (.adp), data access<br />

using ADO<br />

Native support only for Microsoft SQL Server<br />

Serves as database front-end with limited functionality. Local tables are not allowed [2]<br />

. Queries are generally transformed into database views, VBA code manipulating the<br />

data is transformed into procedures stored on server. (compare to thin client).<br />

As any data migration procedure Microsoft Access database upsizing requires fundamental refactoring of the<br />

database structure and source code. Even though some aspects of this procedure seem to be automatized by the<br />

Upsizing Wizard, there are still many points requiring human intervention. Following changes have to be done on<br />

upsizing<br />

1. Complete change of data access interface from DAO to ADO.<br />

2. Substantial change of Microsoft JET SQL to Transact-SQL.<br />

3. Substantial adaptation of object (e.g. tables, columns etc) names.<br />

4. Reconception of the source code to optimally employ the new functionality of ADO and Microsoft SQL Server of<br />

the "upsized" solution.<br />

References<br />

[1] Thomas Groß,Claudia Clemens "Upsizing von Access zu SQL Server", dotnetpro 6/2004<br />

[2] There are though the ways to store some data locally using the save methods of recordset object


Visual FoxPro 65<br />

Visual FoxPro<br />

Typical VFP9 editing session<br />

Original author(s) Microsoft Corporation<br />

Stable release Visual FoxPro 9.0 Service Pack 2 (SP2) / October 11, 2007<br />

Operating system Microsoft Windows<br />

Platform x86 and greater<br />

Available in IDE: English, German, Spanish<br />

Runtime: Above, French, Chinese, Russian, Czech, Korean<br />

Development status Maintenance mode<br />

Type <strong>Database</strong> Programming language<br />

License Microsoft EULA<br />

Website<br />

msdn.microsoft.com/vfoxpro [1]<br />

Visual FoxPro is a data-centric object-oriented and procedural programming language produced by Microsoft. It is<br />

derived from FoxPro (originally known as FoxBASE) which was developed by Fox <strong>Software</strong> beginning in 1984.<br />

Fox Technologies merged with Microsoft in 1992, after which the software acquired further features and the prefix<br />

"Visual". The last version of FoxPro (2.6) worked under Mac OS, DOS, Windows, and Unix: Visual FoxPro 3.0, the<br />

first "Visual" version, dropped the platform support to only Mac and Windows, and later versions were<br />

Windows-only. The current version of Visual FoxPro is COM-based and Microsoft has stated that they do not intend<br />

to create a Microsoft .NET version.<br />

FoxPro originated as a member of the class of languages commonly referred to as "xBase" languages, which have<br />

syntax based on the dBase programming language. Other members of the xBase language family include Clipper and<br />

Recital. (A history of the early years of xBase can be found in the dBase entry.)<br />

Visual FoxPro, commonly abbreviated as VFP, is tightly integrated with its own relational database engine, which<br />

extends FoxPro's xBase capabilities to support SQL query and data manipulation. Unlike most database management<br />

systems, Visual FoxPro is a full-featured, dynamic programming language that does not require the use of an<br />

additional general-purpose programming environment. It can be used to write not just traditional "fat client"<br />

applications, but also middleware and web applications.


Visual FoxPro 66<br />

Recent history<br />

In late 2002, it was demonstrated that Visual FoxPro can run on Linux under the Wine Windows compatibility suite.<br />

In 2003, this led to complaints by Microsoft: it was claimed that the deployment of runtime FoxPro code on<br />

non-Windows machines violates the End User License Agreement. [2]<br />

In December 2005, VFP broke into the top 20 on Tiobe index [3] for the first time. In March 2007 it was at position<br />

19, making it a "B" language. As of April, 2010, VFP (combined with xBase) is at position 39.<br />

In March 2007, Microsoft announced that there will be no VFP 10 [4] , thus making VFP9 (released to manufacturing<br />

on December 17, 2004) the last commercial VFP release from Microsoft. The support of Version 9 is ongoing with<br />

service packs that were released December 8, 2005 and October 11, 2007.<br />

At the time of the end of life announcement, work on the next release codenamed Sedna (named after a recently<br />

discovered dwarf planet) which was built on top of the VFP9 codebase had already begun. "Sedna" is a set of<br />

add-ons to VFP 9.0 of XBase components to support a number of interoperability scenarios with various Microsoft<br />

technologies including SQL Server 2005, .NET Framework, Windows Vista, Office 2007, Windows Search and<br />

Team Foundation Server (TFS). Microsoft released Sedna under the Shared source license on the CodePlex site.<br />

Microsoft has clarified that the VFP core will still remain closed source. Sedna was released on January 25, 2008 [5] .<br />

As of March 2008, all XBase components of the VFP 9 SP2 (including Sedna) were available for<br />

community-development on CodePlex.<br />

In late March 2007 a grassroots campaign was started by the Spanish-speaking FoxPro community at MasFoxPro [6]<br />

(MoreFoxPro in English) to sign a petition to Microsoft to continue updating Visual FoxPro or release it to the<br />

community as Open Source. On April 3, 2007 the movement was noted by the technical press [7]<br />

Also on April 3, 2007 Microsoft responded to the petitioner's requests with this statement from Alan Griver:<br />

"We're very aware of the FoxPro community and that played a large<br />

part in what we announced on March 13th. It's never an easy decision to<br />

announce that we're not going to release another version of a product<br />

and it's one that we consider very carefully.<br />

"We're not announcing the end of FoxPro: Obviously, FoxPro<br />

applications will continue to work. By some of our internal estimates,<br />

there are more applications running in FoxPro 2.6 than there are in<br />

VFP and FoxPro 2.6 hasn't been supported in many years. Visual FoxPro<br />

9 will be supported by Microsoft through 2015.<br />

"For Microsoft to continue to evolve the FoxPro base, we would need<br />

to look at creating a 64-bit development environment and that would<br />

involve an almost complete rewrite of the core product. We've also<br />

invested in creating a scalable database with SQL Server, including the<br />

freely available SQL Server Express Edition. As far as forming a<br />

partnership with a third-party is concerned, we've heard from a number<br />

of large FoxPro customers that this would make it impossible for them<br />

to continue to use FoxPro since it would no longer be from an approved<br />

vendor. We felt that putting the environment into open source on<br />

CodePlex, which balances the needs of both the community and the large<br />

customers, was the best path forward."


Visual FoxPro 67<br />

Version information<br />

Operating system compatibility<br />

Supported Windows Versions<br />

Version VFP 3.0 VFP 5.0 VFP 6.0 VFP 7.0 VFP 8.0 VFP 9.0<br />

Windows 3.x Yes No No No No No<br />

Windows NT 4.0 Yes Yes Yes Yes No<br />

Windows 95 Yes Yes Yes Runtime<br />

Windows 98 Yes Yes Yes Yes Runtime<br />

Windows Me Yes Yes Yes Yes Runtime<br />

only<br />

No [8]<br />

No No<br />

only<br />

only<br />

Runtime<br />

only<br />

Runtime<br />

Windows 2000 Yes Yes Yes Yes Yes Yes<br />

Windows XP Yes Yes Yes Yes Yes Yes<br />

Windows Server 2003 ? ? Yes Yes Yes Yes<br />

Windows Vista Compatibility Mode Yes Yes Yes Yes Yes<br />

Windows 7 (Build<br />

7600)<br />

Information on executable files<br />

Version VERSION() returns EXE<br />

only<br />

? No Yes Yes Yes Yes<br />

Size<br />

EXE Date DLL Size DLL Name<br />

VFP 9 SP2 with Hotfixes Visual FoxPro 09.00.0000.7423 for Windows 5,648 kb April 3, 2009 4,624 kb VFP9R.DLL<br />

VFP 9 SP2 Visual FoxPro 09.00.0000.5721 for Windows 5,648 kb September 21, 2007 4,624 kb VFP9R.DLL<br />

VFP 9 Visual FoxPro 09.00.0000.2412 for Windows 5,620 kb December 13, 2004 4,600 kb VFP9R.DLL<br />

VFP 8 Visual FoxPro 08.00.0000.3117 for Windows 5,236 kb September 25, 2003 4,200 kb VFP8R.DLL<br />

VFP 7 Visual FoxPro 07.00.0000.9465 for Windows 4,260 kb January 4, 2002 3,344 kb VFP7R.DLL<br />

VFP 6 Visual FoxPro 06.00.8961.00 for Windows 4,091 kb August 18, 2000 3,295 kb VFP6R.DLL<br />

VFP 5 Visual FoxPro 5.0.0.415 for Windows 4,065 kb January 24, 1997 3,148 kb VFP500.DLL<br />

VFP 3 Visual FoxPro 03.00.00.0711 for Windows 4,374 kb December 16, 1995 3,657 kb VFP300.ESL<br />

FPW 2.6a FoxPro 2.6a for Windows 2,444 kb September 28, 1994 2,946 kb FOXW2600.ESL


Visual FoxPro 68<br />

Code samples<br />

Hello World example:<br />

MESSAGEBOX("Hello World")<br />

Object<br />

loForm = CREATEOBJECT("HiForm")<br />

loForm.Show(1)<br />

DEFINE CLASS HiForm AS Form<br />

AutoCenter = .T.<br />

Caption = "Hello, World"<br />

ADD OBJECT lblHi as Label WITH ;<br />

Caption = "Hello, World!"<br />

ENDDEFINE<br />

loMine = CREATEOBJECT("MyClass")<br />

Output of the Hello World program.<br />

? loMine.cProp1 && This will work. (Double-ampersand marks an end-of-line comment)<br />

? loMine.cProp2 && Program Error: Property CPROP2 is not found.<br />

? loMine.MyMethod1() && This will work.<br />

? loMine.MyMethod2() && Program Error: Property MYMETHOD2 is not found.<br />

DEFINE CLASS MyClass AS Custom<br />

cProp1 = "My Property" && This is a public property<br />

HIDDEN cProp2 && This is a private (hidden) property<br />

PROCEDURE Init() && Class constructor<br />

This.cProp2 = "This is a hidden property."<br />

ENDPROC<br />

PROCEDURE MyMethod1()<br />

* This is a public method, calling a hidden method that returns<br />

* the value of a hidden property.<br />

RETURN This.MyMethod2()<br />

ENDPROC<br />

HIDDEN PROCEDURE MyMethod2() && This is a private (hidden) method<br />

RETURN This.cProp2<br />

ENDPROC<br />

ENDDEFINE


Visual FoxPro 69<br />

Data handling<br />

&& Create a table<br />

CREATE TABLE randData (iData I)<br />

&& Populate with random data using xBase and SQL DML commands<br />

FOR i = 1 TO 50<br />

APPEND BLANK<br />

REPLACE iData WITH (RAND() * 100)<br />

INSERT INTO randData (iData) VALUES (RAND() * 100) Output of the Data handling program.<br />

ENDFOR<br />

&& Place a structural index on the data<br />

INDEX ON iData TAG iData<br />

CLOSE ALL<br />

&& Display ordered data using xBase-style commands<br />

USE randData<br />

SET ORDER TO iData<br />

GO TOP<br />

LIST NEXT 10 && First 10<br />

SKIP 81<br />

LIST NEXT 10 && Last 10<br />

CLOSE ALL<br />

&& Browse ordered data using SQL DML commands<br />

SELECT * ;<br />

FROM randData ;<br />

ORDER BY iData DESCENDING<br />

ODBC access using SQL passthrough<br />

&& Connect to an ODBC data source<br />

LOCAL nHnd<br />

nHnd = SQLCONNECT ("ODBCDSN", "user", "pwd")<br />

&& Execute a SQL command<br />

LOCAL nResult<br />

nResult = SQLEXEC (nHnd, "USE master")<br />

IF nResult < 0<br />

MESSAGEBOX ("MASTER database does not exist!")<br />

RETURN<br />

ENDIF<br />

&& Retrieve data from the remote server and stores it in<br />

&& a local data cursor


Visual FoxPro 70<br />

nResult = SQLEXEC (nHnd, "SELECT * FROM authors", "QAUTHORS")<br />

&& Update a record in a remote table using parameters<br />

LOCAL cAuthorID, cAuthorName<br />

cAuthorID = "1001"<br />

cAuthorName = "New name"<br />

nResult = SQLEXEC (nHnd, "UPDATE authors SET auth_name = ?cAuthorName WHERE auth_id = ?cAuthorID")<br />

&& Close the connection<br />

SQLDISCONNECT(nHnd)<br />

Beta code names<br />

• VFP 3 - Taz<br />

• VFP 5 - RoadRunner<br />

• VFP 6 - Tahoe<br />

• VFP 7 - Sedona<br />

• VFP 8 - Toledo<br />

• VFP 9 - Europa<br />

• VFP Next - Sedna<br />

External links<br />

Microsoft pages<br />

• Main Visual FoxPro Microsoft page [9]<br />

• <strong>MS</strong>DN FoxPro support board [10]<br />

• VFP's online help [11]<br />

• Microsoft VFP 9 support [12]<br />

• Visual FoxPro Downloads page [13]<br />

Other pages<br />

• Visual FoxPro Wiki [14] A repository of FoxPro information (written in VFP)<br />

• A site devoted to the history of FoxPro [15]<br />

• VFPx [16] A Visual FoxPro Community effort to create open source add-ons for VFP 9.0<br />

References<br />

[1] http:/ / msdn. microsoft. com/ vfoxpro<br />

[2] VFP and Linux - Visual FoxPro Wiki (http:/ / fox. wikis. com/ wc. dll?Wiki~VFPandLinux)<br />

[3] Tiobe Index History for FoxPro (http:/ / www. tiobe. com/ index. php/ paperinfo/ tpci/ FoxPro_xBase. html)<br />

[4] A Message to the Community (http:/ / msdn2. microsoft. com/ en-us/ vfoxpro/ bb308952. aspx)<br />

[5] Microsoft SEDNA download (http:/ / www. microsoft. com/ downloads/ details.<br />

aspx?FamilyId=C04BCF8C-0944-49F0-AC2B-563518CE1D70& displaylang=en)<br />

[6] MasFoxPro (http:/ / www. masfoxpro. com)<br />

[7] Developers petition Microsoft to reconsider FoxPro phase out (http:/ / blogs. zdnet. com/ microsoft/ ?p=361) Posted by Mary Jo Foley (April<br />

3rd, 2007) - All about Microsoft - ZDNet.com<br />

[8] - The free patch for VFP 9.0 has been created by the German FoxPro User Group (dFPUG) and is available at the dFPUG document portal in<br />

the directory http:/ / portal. dfpug. de/ dFPUG/ Dokumente/ Freeware/ . It allows you to run VFP 9.0 applications on NT 4.0. Microsoft has<br />

indicated that this will be addressed in VFP 9.0 SP1.<br />

[9] http:/ / msdn. microsoft. com/ vfoxpro/


Visual FoxPro 71<br />

[10] http:/ / forums. microsoft. com/ msdn/ showforum. aspx?forumid=60& siteid=1<br />

[11] http:/ / msdn. microsoft. com/ en-us/ library/ ms950411. aspx<br />

[12] http:/ / support. microsoft. com/ vfp9<br />

[13] http:/ / msdn. microsoft. com/ en-us/ vfoxpro/ bb190230. aspx<br />

[14] http:/ / fox. wikis. com<br />

[15] http:/ / www. foxprohistory. org<br />

[16] http:/ / vfpx. codeplex. com<br />

XLeratorDB<br />

XLeratorDB is a suite of database function libraries that enable Microsoft SQL Server to perform a wide range of<br />

additional (non-native) business intelligence and ad hoc analytics. The libraries, which are embedded and run<br />

centrally on the database, include more than 300 individual functions similar to those found in Microsoft Excel<br />

spreadsheets. The individual functions are grouped and sold as six separate libraries based on usage: finance,<br />

statistics, math, engineering, unit conversions and strings. WestClinTech, the company that developed XLeratorDB,<br />

claims it is "the first commercial function package add-in for Microsoft SQL Server." [1]<br />

Company history<br />

WestClinTech (LLC), founded by software industry veterans Charles Flock and Joe Stampf in 2008, is located in<br />

Irvington, New York, USA. Flock was a co-founder of The Frustum Group, developer of the OPICS enterprise<br />

banking and trading platform, which was acquired by London-based Misys, PLC in 1996. [2] Stampf joined Frustum<br />

in 1994 and with Flock remained active with the company after acquisition, helping to develop successive<br />

generations of OPICS now employed by over 150 leading financial institutions worldwide. [3]<br />

Following a full year of research, development and testing, WestClinTech introduced and recorded its first<br />

commercial sale of XLeratorDB in April 2009. [4] [5] In September 2009, XLeratorDB became available to all<br />

Federal agencies through NASA's Strategic Enterprise-Wide Procurement (SEWP-IV) program, a government-wide<br />

acquisition contract. [6]<br />

Technology<br />

XLeratorDB uses Microsoft SQL CLR(Common Language Runtime) technology. [7] SQL CLR allows managed<br />

code to be hosted by, and run in, the Microsoft SQL Server environment. SQL CLR relies on the creation,<br />

deployment and registration of .NET Framework assemblies that are physically stored in managed code<br />

dynamic-link libraries (DLL). The assemblies may contain .NET namespaces, classes, functions, and properties.<br />

Because managed code compiles to native code prior to execution, functions using SQL CLR can achieve significant<br />

performance increases versus the equivalent functions written in T-SQL in some scenarios. [8]<br />

XLeratorDB requires Microsoft SQL Server 2005 or SQL Server 2005 Express editions, or later (compatibility<br />

mode 90 or higher). [9] The product installs with PERMISSION_SET=SAFE. SAFE mode, the most restrictive<br />

permission set, is accessible by all users. Code executed by an assembly with SAFE permissions cannot access<br />

external system resources such as files, the network, the internet, environment variables, or the registry. [10]


XLeratorDB 72<br />

Functions<br />

In computer science, a function is a portion of code within a larger program which performs a specific task and is<br />

relatively independent of the remaining code. As used in database and spreadsheet applications these functions<br />

generally represent mathematical formulas widely used across a variety of fields. While this code may be<br />

user-generated, it is also embedded as a pre-written sub-routine in applications. These functions are typically<br />

identified by common nomenclature which corresponds to their underlying operations: e.g. IRR identifies the<br />

function which calculates Internal Rate of Return on a series of periodic cash flows.<br />

Function uses<br />

As sub-routines functions can be integrated and used in a variety of ways, and in a wide variety of larger, more<br />

complicated applications. Within large enterprise applications they may, for example, play an important role in<br />

defining business rules or risk management parameters, while remaining virtually undetected by end users. Within<br />

database management systems and spreadsheets, however, these kinds of functions also represent discrete sets of<br />

tools; they can be accessed directly and utilized on a stand-alone basis, or in more complex, user-defined<br />

configurations. In this context, functions can be used for business intelligence and ad hoc analysis of data in fields<br />

such as finance, statistics, engineering, math, etc.<br />

Function types<br />

XLeratorDB uses three kinds of functions to perform analytic operations: scalar, aggregate, and a hybrid form<br />

which WestClinTech calls Range Queries. Scalar functions take a single value, perform an operation and return a<br />

single value. [11] An example of this type of function is LOG, which returns the logarithm of a number to a specified<br />

base. [12] Aggregate functions operate on a series of values but return a single, summarizing value. An example of<br />

this type of function is AVG, which returns the average of values in a specified group. [13]<br />

In XLeratorDB there are some functions which have characteristics of aggregate functions (operating on multiple<br />

series of values) but cannot be processed in SQL CLR using single column inputs, such as AVG does. For example,<br />

irregular internal rate of return (XIRR), a financial function, operates on a collection of cash flow values from one<br />

column, but must also apply variable period lengths from another column and an initial iterative assumption from a<br />

third, in order to return a single, summarizing value. WestClinTech documentation notes that Range Queries specify<br />

the data to be included in the result set of the function independently of the WHERE clause associated with the<br />

T-SQL statement, by incorporating a SELECT statement into the function as a string argument; the function then<br />

traps that SELECT statement, executes it internally and processes the result. [14]<br />

Some XLeratorDB functions that employ Range Queries are: NPV, XNPV, IRR, XIRR, MIRR,<br />

MULTINOMIAL, and SERIESSUM. Within the application these functions are identified by a "_q" naming<br />

convention: e.g. NPV_q, IRR_q, etc. [15]<br />

Analytic functions<br />

SQL Server functions<br />

Microsoft SQL Server is the #3 selling database management system (DB<strong>MS</strong>), behind Oracle and IBM. [16] (While<br />

versions of SQL Server have been on the market since 1987 [17] , XLeratorDB is compatible with only the 2005<br />

edition and later.) Like all major DB<strong>MS</strong>, SQL Server performs a variety of data mining operations by returning or<br />

arraying data in different views (also known as drill-down). In addition, SQL Server uses Transact-SQL (T-SQL) [18]<br />

to execute four major classes of pre-defined functions in native mode. [19] Functions operating on the DB<strong>MS</strong> offer<br />

several advantages over client layer applications like Excel: they utilize the most up-to-date data available; they can<br />

process far larger quantities of data; and, the data is not subject to exporting and transcription errors [20] .


XLeratorDB 73<br />

SQL Server 2008 includes a total of 58 functions that perform relatively basic aggregation (12), math (23) and string<br />

manipulation (23) operations useful for analytics; it includes no native functions that perform more complex<br />

operations directly related to finance, statistics or engineering. [21]<br />

Excel functions<br />

Microsoft Excel, a component of Microsoft Office suite, is one of the most widely used spreadsheet applications on<br />

the market today. [22] In addition to its inherent utility as a stand-alone desktop application, Excel overlaps and<br />

complements the functionality of DB<strong>MS</strong> in several ways: storing and arraying data in rows and columns; performing<br />

certain basic tasks such as pivot table [23] and aggregating values; and facilitating sharing, importing and exporting of<br />

database data. Excel’s chief limitation relative to a true database is capacity; Excel 2003 is limited to some 65k rows<br />

and 256 columns; Excel 2007 extends this capacity to roughly 1million rows and 16k columns. [24] By comparison,<br />

SQL Server is able to manage over 500k terabytes of memory. [25]<br />

Excel offers, however, an extensive library of specialized pre-written functions which are useful for performing ad<br />

hoc analysis on database data. Excel 2007 includes over 300 of these pre-defined functions, although customized<br />

functions can also be created by users, or imported from third party developers as add-ons. Excel functions are<br />

grouped by type: [26]<br />

Excel Functions<br />

Financial Statistical Engineering Math and trig<br />

Information Date and time Text and<br />

Add-ins<br />

and<br />

automation<br />

Excel business intelligence functions<br />

Lookup and<br />

reference<br />

data<br />

Logical<br />

Cube <strong>Database</strong> and<br />

list<br />

management<br />

Operating on the client computing layer Excel plays an important role as a business intelligence tool [27] because it:<br />

• performs a wide array of complex analytic functions not native to most DB<strong>MS</strong> software<br />

• offers far greater ad hoc reporting and analytic flexibility than most enterprise software<br />

• provides a medium for sharing and collaborating because of its ubiquity throughout the enterprise<br />

Microsoft reinforces this positioning with Business Intelligence documentation that positions Excel in a clearly<br />

pivotal role. [28]<br />

XLeratorDB vs. Excel functions<br />

While operating within the database environment, XLeratorDB functions utilize the same naming conventions and<br />

input formats, and in most cases, return the same calculation results as Excel functions. [29] XLeratorDB, coupled<br />

with SQL Server's native capabilities, compares to Excel's function sets as follows:


XLeratorDB 74<br />

External links<br />

Function<br />

Type<br />

• XLeratorDB website [30]<br />

Excel 2007 XLeratorDB + SQL Server<br />

Total Total Match New Native<br />

Financial 52 63 50 13 0<br />

Statistics 83 131 65 54 12<br />

Math 59 73 34 16 23<br />

Engineering 39 42 38 4 0<br />

Conversions* 49 77 0 77 0<br />

Strings 26 58 11 24 23<br />

*Microsoft includes these functions within Engineering using variable input configurations<br />

• Microsoft SQL Server Documentation [31]<br />

• Microsoft Excel Documentation [32]<br />

References<br />

[1] http:/ / WestClinTech. com/ Home/ tabid/ 36/ Default. aspx<br />

[2] http:/ / www. fundinguniverse. com/ company-histories/ Misys-PLC-Company-History. html<br />

[3] http:/ / www. misys. com/ tcm/ markets/ otc_derivative_trading_solutions-opics_plus. html<br />

[4] http:/ / www. sqlmag. com/ Articles/ ArticleID/ 102126/ 102126. html?Ad=1<br />

[5] http:/ / WestClinTech. com/ CaseStudyNewlandCommunities/ tabid/ 178/ Default. aspx<br />

[6] http:/ / www. sewp. nasa. gov/ index. shtml<br />

[7] http:/ / WestClinTech. com/ wct_local/ Documentation/ AboutXLeratorDB/ tabid/ 148/ topic/ Technology/ Default. aspx<br />

[8] This needs a reference<br />

[9] http:/ / WestClinTech. com/ Support/ FAQ/ tabid/ 143/ Default. aspx#PL_A1_RequiredToInstall<br />

[10] See SQL Server DB<strong>MS</strong> documentation at: http:/ / msdn. microsoft. com/ en-us/ library/ ms130214. aspx<br />

[11] Also see: http:/ / msdn. microsoft. com/ en-us/ library/ ms174318. aspx<br />

[12] Excel definition at: http:/ / office. microsoft. com/ en-us/ excel/ HP100624401033. aspx<br />

[13] SQL Server definition at: http:/ / msdn. microsoft. com/ en-us/ library/ ms177677. aspx<br />

[14] http:/ / WestClinTech. com/ wct_local/ Documentation/ AboutXLeratorDB/ tabid/ 148/ topic/ Range%20Queries/ Default. aspx<br />

[15] See XLeratorDB Function Packages information box, above<br />

[16] IDC COMPETITIVE ANALYSIS: Worldwide Relational <strong>Database</strong> Management Systems 2007 Vendor Shares, Carl W. Olofson, June<br />

2008, IDC #212840, Volume: 1, Tab: Markets<br />

[17] http:/ / e-articles. info/ e/ a/ title/ A-Brief-History-of-Microsoft-SQL-Server/<br />

[18] http:/ / msdn. microsoft. com/ en-us/ library/ ms166026%28SQL. 90%29. aspx<br />

[19] http:/ / msdn. microsoft. com/ en-us/ library/ ms174318. aspx<br />

[20] IBM refers to this as "no-paste analytics. See Data Warehousing documentation.<br />

[21] http:/ / msdn. microsoft. com/ en-us/ library/ ms174318%28v=SQL. 100%29. aspx<br />

[22] Various sources suggest Office/Excel market share exceeds 90%, but this needs a specific source/citation<br />

[23] http:/ / searchsqlserver. techtarget. com/ sDefinition/ 0,,sid87_gci875976,00. html<br />

[24] See Excel documentation<br />

[25] http:/ / msdn. microsoft. com/ en-us/ library/ ms143432. aspx<br />

[26] http:/ / office. microsoft. com/ en-us/ excel/ HA102775241033. aspx<br />

[27] See general Business Intelligence documentation Microsoft and IBM, for example: http:/ / download. boulder. ibm. com/ ibmdl/ pub/<br />

software/ data/ sw-library/ cognos/ pdfs/ factsheets/ fs_cognos8bi_analysis_for_microsoft_excel. pdf<br />

[28] http:/ / www. microsoft. com/ presspass/ newsroom/ office/ BusinessIntelligenceFS. mspx<br />

[29] http:/ / www. WestClinTech. com/ Blog/ tabid/ 132/ EntryID/ 19/ Default. aspx<br />

[30] http:/ / www. WestClinTech. com/<br />

[31] http:/ / www. microsoft. com/ sqlserver/ 2008/ en/ us/ default. aspx


XLeratorDB 75<br />

[32] http:/ / office. microsoft. com/ en-us/ excel/ default. aspx


Article Sources and Contributors 76<br />

Article Sources and Contributors<br />

Microsoft Access Source: http://en.wikipedia.org/w/index.php?oldid=363113785 Contributors: 144.132.70.xxx, 1stContact, 24.15.135.xxx, A. B., Aamfk, Aaronhill, Acebulf, After Midnight,<br />

AgentCDE, Ahoerstemeier, Ajcomeau, Alaudo, Albert Kallal, Aldaron, AlexDybenko, Alexander.hugh.george, Alexdyb, Amelia Hunt, Amicron, Anonymoues, Antalas, Antandrus, Aruton,<br />

Atkinsdc, Axeltroike, BWCNY, Barcelona Wiki, Belovedfreak, Bevo, Binary TSO, Bobo192, Boggie, Borgx, Bradjamesbrown, BraneJ, CC90, Cae prince, Cander0000, Chad01, Chillum,<br />

Cinnamon42, Ckredo, Cleared as filed, ClickRick, Closedmouth, Cmc87, Cmdrjameson, Cobraman156, Cocoma, Coffeehood, Coldacid, Colinstu, Conversion script, Cp111, Ctkeene,<br />

Cwolfsheep, Cyclonenim, D0762, DanielRigal, DataAnalyzer, David Jordan, Deathtreath93, Decltype, Dekisugi, Delpino, Deor, Derumi, Dina, Discospinster, Djm1279, Djmckee1,<br />

DocWatson42, Dogloverxyz, Doradus, Dreammaker182, Dureo, Dylan Lake, Dysepsion, Dysprosia, ERcheck, ESkog, ETomeny, Ed Poor, ElKevbo, Ellmist, Elm-39, Endtoend, Epbr123, Erik<br />

Zachte, FayssalF, Forenti, Frap, Fred Bradstadt, Fredrick day, FrenchIsAwesome, FreplySpang, GNRY09, Gadfium, Gary King, Gaudoine, Gavin Lisburn, Genesispc, Georgeryp, Ghettoblaster,<br />

Gilliam, Goa103, Greenrd, GreyCat, Gscshoyru, Hahaha07, Happenstance, Hasek is the best, Hawaiian Eskimo, Hippy deluxe, Hj3973, Hu, Hydrogen Iodide, I dream of horses, IGod, II MusLiM<br />

HyBRiD II, IW.HG, Immunize, Intgr, Iridescent, J. Finkelstein, J.delanoy, J04n, JHunterJ, JLaTondre, Jackl, Jackz, Jaeger5432, Jaksmata, JamesBWatson, Javierluraschi, Jay, Jerazol, Jj0909jj,<br />

Jnl001, JoanneB, Johnleemk, Jojhutton, Josh the Nerd, Jstaniek, Jwoodger, KD5TVI, Kainaw, Kanags, Kassie, Katharineamy, Katieh5584, Kerotan, Ketiltrout, Kevyn82, Khlo, King of Hearts,<br />

Konstable, Krich, Kuru, Kyle Rayner, Latha P Nair, LauraFarina, LeaveSleaves, LedgendGamer, Libcub, Liftarn, Limbojones, Linkspamremover, Linuxerist, Lofote, Logan, Lollol07, Lou.weird,<br />

Lowellian, Luci Sandor, Luna Santin, Lupin, M4bwav, M7, MER-C, Ma'ame Michu, Mal Browncoat, Manzell, MarkGallagher, MattieTK, Melaen, MetaManFromTomorrow, MetsFan76,<br />

Mewkalewk, Michig, Mike12345678, Mikebrand, Mindenn123, Minghong, Modster, Mopza, Morwen, Moverton, Mr. Ash, Mr. James, MrJones, Mushroom, Mwtoews, Myanw, Nae'blis,<br />

Nainawalli, NawlinWiki, Necessary Evil, Neilc, Nexusdb, Nico5038, Norm, Nwt, Oberiko, Ohei, Olivier Mengué, Omarcheeseboro, Omicronpersei8, Orrc, Peter Delmonte, Peterl, Phlegat, Piano<br />

non troppo, Pinkadelica, Pixi, Pjb007, Poor Yorick, R'n'B, RN, Rabbit994, Rajpaj, RandomStuff, Razimantv, Rdrs, Reach Out to the Truth, Rebroad, Reedy, Revmachine21, Reywas92,<br />

Rfdparker2002, Rhobite, Riki, Rjwilmsi, Rklawton, Robbie andrew, RobertG, RogerJennings, Rrabins, Rsocol, SDSWIKI, SJP, Saintyboy666, SaltyBoatr, Sam Hocevar, Sam Korn, Samuel<br />

Blanning, Sandstein, Schmiteye, SchuminWeb, Scottmcd9999, Shinjiman, ShotoSensei, SimonEast, Sjakkalle, Skittleys, Sligocki, Soumyasch, SqueakBox, Stephan Leeds, Stephenb,<br />

Stephenchou0722, Stinerman, Stolsvik, Suffusion of Yellow, Surv1v4l1st, Sushi500, TAIntedCHInese, THEN WHO WAS PHONE?, Ta bu shi da yu, Tanaats, Techmdrn, Ted.macneil, Template<br />

namespace initialisation script, Teneriff, Texture, The High Fin Sperm Whale, The stuart, TheProject, Thinknirmal, This, that and the other, Thnder, Tide rolls, Timneu22, Tkbwik, Tmopkisn,<br />

Tohd8BohaithuGh1, Tom harrison, Troels Arvin, Tyomitch, Tyw7, Uildriks, Ulric1313, Uncle Dick, Uncle Gizmo, Useight, Utcursch, Valdez123, Versus22, Vicenarian, VictorReinhart,<br />

Violetriga, W3stfa11, WDavis1911, Warren, Whiskerz, Wiki alf, Wiki fanatic, Wikinator2008, Witharebelyell, Wj32, Wknight94, Wmahan, Wugzr, WysardOfInformation, Wysprgr2005,<br />

Xpclient, Yidisheryid, YuTanaka, ZacBowling, Zimbabwer, Zippy1981, Zwikipenguin, Zzuuzz, Ævar Arnfjörð Bjarmason, ㍐, 777 anonymous edits<br />

Microsoft SQL Server Source: http://en.wikipedia.org/w/index.php?oldid=362988635 Contributors: A Softer Answer, Aaronsteers, Accurizer, AdRiley, Agent Conundrum, Ahoerstemeier,<br />

Aim Here, AlistairMcMillan, AndrewHZ, Andrewpmk, Andy Dingley, Antandrus, Anteallach, Ap, Atanamir, Avsharath, AxelBoldt, Axeltroike, BBCWatcher, BBird, BW, Bahder, Bevo,<br />

Bezenek, Bluemoose, Bobblewik, Bonadea, BonsaiViking, Borgx, Bradmcgehee, BuckWoody, C+C, CALR, CRGreathouse, CWii, Cadr, Caffm8, Can't sleep, clown will eat me,<br />

CanadianLinuxUser, ChazBeckett, Chealer, Clausen, Cornflake pirate, Cpl Syx, Cwolfsheep, Daniel.Cardenas, DeadEyeArrow, Debresser, DerHexer, Diberri, Discreetlogic, Dmsar, Doc0tis,<br />

Dr.Soft, Dumbledad, Dylan620, ED-tech, Eddiet19, Editore99, Eeekster, Ejdzej, ElTyrant, Emurphy42, Fennec, Fishnet37222, ForestsWing, Fox2030, Fred Bradstadt, Garion96,<br />

Genejohannas72, Glenn4pr, Gogo Dodo, GrahamDo, GregorB, Gwernol, Haakon, Halluck, Heirpixel, Herbythyme, Heron, Hitesh84.patel, HorseShoe, IO Device, Idjles, IlyaHaykinson, Imsaguy,<br />

Iridescent, Ivan sus77, J.delanoy, J.swapnil28, JAZAM007, JForget, JLaTondre, JNW, Ja 62, JaGa, Jago84, JamesBWatson, Jammycakes, Jayrascoe, Jcmorin, Jdlambert, Jehochman, Jerazol,<br />

Jerome Charles Potts, Jfchickimon, Jonathonblocker, Jorge Stolfi, Jrowlandjones, Jutiphan, Jzylstra, Karimfayazi, Katmairock, KellyCoinGuy, Ketiltrout, KevinMadsen, Kjramesh, Kkm010,<br />

KnowledgeOfSelf, Konstable, Kprobst, Laganojunior, Larsinio, Leiterfluid, LiDaobing, Limideen, Ling.Nut, Loser137, M7, MER-C, MahaDave, Markhurd, MattPenner, MayaSimFan,<br />

Mboverload, Mckaysalisbury, Mdchachi, Mentifisto, Metasquares, Michael Devore, Mike Rosoft, Mikeblas, Mikejpoole, Minghong, MinorContributor, Mjb, Mkoval, Mmmichelle a, Modster,<br />

Moki80, Mormegil, MosYassin, MrOllie, Mscantland, Msp0, Mwtoews, Natalie Erin, NawlinWiki, Nealw1590, Neil9327, NewEnglandYankee, Nicholasethier, Nixdorf, Norm mit, Noxia,<br />

Noypi380, ObserverToSee, Odie5533, Ognjen k, Olathe, Outriggr, OwenBlacker, Oxymoron83, Pangloss, Pats1, Paul Foxworthy, Peter Blackburn, Petr.koc, Pill, Pillefj, Pinaldave, PittSammy,<br />

Poss, Pstavroulis, Pugglewuggle, Quadrature, Quantix, Ratarsed, Ravedave, Raysonho, Rboatright, Rebecca, RedWolf, Rednblu, Reedy, Revision17, Rhobite, Rich Farmbrough, Riki, Rjwilmsi,<br />

Roberto.icaza, Romualdo Juan Caruso, RoyBoy, Royhandy, Rsocol, Ryulong, S.Örvarr.S, SP-KP, Samuel Pepys, Sanjaykaul2000, Sbrockway, ScratzNutz, Seb35, Sega381, Serge <strong>MS</strong>, Sesu<br />

Prime, Shannara, Shoeofdeath, SiliconCerebrate, Smalljim, Sneha.kumar, Snoyes, Soumyasch, Sql mvp, Stankrom, Starionwolf, StefanPapp, SteinbDJ, Stick109, Stickee, Strangnet, Suprotim,<br />

Svick, TJJFV, Ta bu shi da yu, TakuyaMurata, Tarquin, TastyPoutine, Tbsdy lives, TeaDrinker, Tedickey, Thalter, The Epopt, The Letter J, The Thing That Should Not Be, TheFeds, Thingg,<br />

Thumperward, TigerShark, Tim Song, Toddst1, Tonyfaull, Topbanana, Torc2, Troels Arvin, Twilight, Ugur Basak, Ulric1313, Ummit, Uzume, Verticalsearch, Vladislav Artukov, W3bbo,<br />

Wadamja, Warren, Wesley, West.andrew.g, Wiki fanatic, Wikiolap, WikipedianMarlith, Will381796, Wiretse, Wpedzich, Xpclient, Yamamoto Ichiro, YordanGeorgiev, ZacBowling, ZooFari,<br />

Zzombie, 685 anonymous edits<br />

SQL CLR Source: http://en.wikipedia.org/w/index.php?oldid=361655394 Contributors: Alai, Amalas, Colonies Chris, Dkent600, Dojikami, Echuck215, Jmkehayias, KathrynLybarger,<br />

Malcolma, Rabin06, Rider.cz, Rogerd, Soumyasch, Torc2, Warren, Xpclient, 8 anonymous edits<br />

SQL Query Analyzer Source: http://en.wikipedia.org/w/index.php?oldid=357751831 Contributors: Cnovy, GeorgeLouis, Mseliw, Phalseid<br />

SQL Server Integration Services Source: http://en.wikipedia.org/w/index.php?oldid=361606781 Contributors: Brammp, Conscious, CosineKitty, Cwolfsheep, Extremesanity, FleetCommand,<br />

Flstc07, Fred Bradstadt, Freecyprus, Fuhghettaboutit, Ggoli, Haakon, Inquam, J mareeswaran, Kai 92604, Leigh, Longshot14, Lsavidge, MaggotArt, Mahesh Bakal, Mcharper, Mikeblas,<br />

Minimac, Nite eagle, Nn123645, Openhazel, PeterStJohn, Plyons, Rodasmith, SMerrill8, Sarnholm, Stevage, Stwalkerster, Suffusion of Yellow, Warren, WhiteOak2006, Wikiolap, XtinaS, 98<br />

anonymous edits<br />

SQL Server Management Studio Source: http://en.wikipedia.org/w/index.php?oldid=362936463 Contributors: Anas2048, Anton Gutsunaev, Balasionut, Bebo930, Brianga, Dawynn,<br />

Mahanga, Mikeblas, RoyBoy, Soumyasch, StuffOfInterest, WOSlinker, Warren, Xpclient, 17 anonymous edits<br />

SQL Server Notification Services Source: http://en.wikipedia.org/w/index.php?oldid=317989811 Contributors: Aldryd, Chowbok, Crazy Boris with a red beard, Cwolfsheep, FleetCommand,<br />

Kendallsoft, Torc2, 9 anonymous edits<br />

SQL Server Reporting Services Source: http://en.wikipedia.org/w/index.php?oldid=361637781 Contributors: AdamCogan, Bobblehead, Bwelcker, Cwolfsheep, Deimorz, Ffaint, Gary King,<br />

Genericprodigy, Geverend, Karthikshanth, Kgwikipedian, Kuru, MER-C, Macrakis, Max max mir, Northgrove, Paul Foxworthy, Raviking001, Reportrunner, Rodders147, Rror, ShatteredArm,<br />

Sloman, Soumyasch, Vaandamme, Zimagor, 60 anonymous edits<br />

Microsoft Query by Example Source: http://en.wikipedia.org/w/index.php?oldid=346069771 Contributors: Dawynn, Jni, KeyStroke, Pegship, RedWolf, Schmiteye, ScottDavis, Ta bu shi da<br />

yu, TurboGiant, 11 anonymous edits<br />

Microsoft Analysis Services Source: http://en.wikipedia.org/w/index.php?oldid=363628054 Contributors: Andy Dingley, Angelo.romano, Colonies Chris, Cutley, Cwolfsheep, Drewgut,<br />

EbenVisher, Edwardmel, Exprexxo, FleetCommand, JLaTondre, Ketiltrout, Mikeblas, Nricardo, Ropez, Schmiteye, Soumyasch, Tntdj, Warren, Wikiolap, ZMerLynn, Île flottante, 60 anonymous<br />

edits<br />

Professional Association for SQL Server Source: http://en.wikipedia.org/w/index.php?oldid=359202830 Contributors: Darklilac, Hotfusioncommunications, Nfomi, PaulNielsenSQL,<br />

RedWolf, 1 anonymous edits<br />

AutoNumber Source: http://en.wikipedia.org/w/index.php?oldid=351132016 Contributors: Dawynn, Moverton, Santryl, Tckma, Thnder, Uncle G, 1 anonymous edits<br />

Bulk Copy Program Source: http://en.wikipedia.org/w/index.php?oldid=360123498 Contributors: Alephnot, Alksub, Danosmith, Fabrictramp, Gary King, Kalotus, Leolaursen, Mattisse, Norm<br />

mit, Paste, Tustin2121, Wizir01, Xpclient, 1 anonymous edits<br />

Business Intelligence Development Studio Source: http://en.wikipedia.org/w/index.php?oldid=346064517 Contributors: Dawynn, Soumyasch, Wikiolap, 5 anonymous edits<br />

Scome Source: http://en.wikipedia.org/w/index.php?oldid=331620358 Contributors: MuffledThud, RP459, Smile4mo, The drewster<br />

Data Transformation Services Source: http://en.wikipedia.org/w/index.php?oldid=352022060 Contributors: 10stone5, Can't sleep, clown will eat me, Downtown dan seattle, Fbd, Ggoli,<br />

Jaglog2, Joinarnold, Ketiltrout, Kiore, Kmorozov, Margyl, Megaman en m, Michael Hardy, Mikeblas, Nite eagle, Oleg Alexandrov, Quadell, Rjwilmsi, Sarnholm, Seany72, Stevage, Tonicblue,<br />

TurningWork, UnitedStatesian, Veyklevar, Warren, Wikiolap, 62 anonymous edits<br />

<strong>Database</strong> engine tuning advisor Source: http://en.wikipedia.org/w/index.php?oldid=354342312 Contributors: Buddy23Lee, Ciphers, Nicholasethier, Tejmur


Article Sources and Contributors 77<br />

Enterprise Manager Source: http://en.wikipedia.org/w/index.php?oldid=339576528 Contributors: -fin, Arun Philip, DeLarge, Mwtoews, Nickdenker, Paul a morrison, Rhobite, S.Örvarr.S,<br />

Soumyasch, Tabletop, TheParanoidOne, UC Bill, Warren, 9 anonymous edits<br />

Extensible Storage Engine Source: http://en.wikipedia.org/w/index.php?oldid=363664253 Contributors: CDV, CarolGray, Comps, Cwolfsheep, DLOD, DRE, Dccwilliams, Family Guy Guy,<br />

FleetCommand, Kubanczyk, Moocha, Mtlk, Nerdrew, Nono64, OmerMor, Pozcircuitboy, Reporter32123, Rimefrost, Rjwilmsi, SeanBDurkin, Sharcho, Soumyasch, Sydbarrett74, Thalter,<br />

Thunderbird2, Volt42, Warren, Winterheat, 32 anonymous edits<br />

FoxPro 2 Source: http://en.wikipedia.org/w/index.php?oldid=349382734 Contributors: Alexf, BillWSmithJr, CRGreathouse, Cander0000, Fragglet, Georgeryp, GregorB, Gurch, Igor2004,<br />

Jamestaylor, Josi.ow, MaGioZal, Mazin07, Mmerlinn, Museo8bits, Psychonaut, Recital, RingtailedFox, SarekOfVulcan, Wwardw, 21 anonymous edits<br />

Microsoft Jet <strong>Database</strong> Engine Source: http://en.wikipedia.org/w/index.php?oldid=363103658 Contributors: AP61, Alaudo, AlistairMcMillan, Am088, Bdog42, Borgx, Cander0000, Causa<br />

sui, Charles Matthews, Chowbok, Chris the speller, Christopher G Lewis, Conscious, Cwolfsheep, DOSGuy, Echoray, EdGl, FleetCommand, Flydpnkrtn, GPHemsley, GraemeL, Howcheng,<br />

Hpce, IntoCom, Ivan Pozdeev, Jleedev, JonH, Kim Bruning, Kubanczyk, Lschwa01, Lupo, Mdmatney, Michael Greiner, Michael412, Mild Bill Hiccup, P Ingerson, Pavel Vozenilek, Peterl,<br />

Project2501a, RN, Retran, Rhobite, Ringbang, Robhull, Rugby471, S, S ried, Satori, Saxton, Soumyasch, Starionwolf, Ta bu shi da yu, Tedickey, Thalter, TreveX, Ventura, Voyagerfan5761,<br />

WahreJakob, Wayward, Webaware, Wormygermy, Xpclient, 89 anonymous edits<br />

Report Definition Language Source: http://en.wikipedia.org/w/index.php?oldid=352998102 Contributors: Emurphy42, Kingturtle, Largoplazo, Macrakis, Polluks, Rodders147, Scottwilleke,<br />

Ver, 22 anonymous edits<br />

Upsizing (database) Source: http://en.wikipedia.org/w/index.php?oldid=247137470 Contributors: Alaudo, Bunnyhop11, CRGreathouse, Gjbakker, 2 anonymous edits<br />

Visual FoxPro Source: http://en.wikipedia.org/w/index.php?oldid=361705326 Contributors: Aivosto, Albanaco, Ale jrb, Alexf, Andre Engels, Andrzej P. Wozniak, AnimalFriend,<br />

ArmadilloFromHell, Aspnetajax, Audriusa, Auntof6, AxelBoldt, Balrog-kun, Bigown, BillWSmithJr, Brat32, CBM, CRGreathouse, Cander0000, Captain Trips, Cdw1952, CraigBailey,<br />

CraigoJazz, Danakil, Dkalweit, EEMIV, EdBever, Ekjon Lok, Elwhitney, Ericsalim, Eurleif, Faisal.akeel, Fazilati, Funke, Galaad2, GeorgeMoney, Gioto, Gombang, Greenrd, Grstain, Gudeldar,<br />

Haggisbingo, Halleyscomet, HedgeHog, Hilmarz, Icseaturtles, Igor2004, Imroy, Introvert, JCLately, Jasabella, Jeltz, JesseHogan, Jutiphan, Jvhertum, Kentcurtis, Kesla, Kuru, Lexie 40, Lovelac7,<br />

Luna Santin, Mathmo, Maury Markowitz, Mellery, Mikaey, Mikeblas, Mikenolte, Mlaffs, Mmerlinn, Modster, Mxn, Norm mit, Notbyworks, Notinthisworld, Pol098, Pro bug catcher, Rboatright,<br />

Recital, RedWolf, Rexmorgan, Rich Farmbrough, Rrabins, Rsocol, Ruud Koot, Ryan2845, RyanNerd, Samt3, SarekOfVulcan, Shizhao, Soumyasch, StevenBlack, Stevesawyer, Stovetopcookies,<br />

Surv1v4l1st, Ta bu shi da yu, Thalter, TheCatalyst31, Thingg, Tiffer, ToddClausen, ToolmakerSteve, Topbanana, Ubzy, VX, Vespina, Waza, Wik, William Allen Simpson, Wizardman, Zaiken,<br />

247 anonymous edits<br />

XLeratorDB Source: http://en.wikipedia.org/w/index.php?oldid=355575851 Contributors: Belovedfreak, Cander0000, Difu Wu, Drbreznjev, Dthomsen8, J04n, Jpbowen, R'n'B, Sqltool, 1<br />

anonymous edits


Image Sources, Licenses and Contributors 78<br />

Image Sources, Licenses and Contributors<br />

Image:Office Access 2007 Icon.png Source: http://en.wikipedia.org/w/index.php?title=File:Office_Access_2007_Icon.png License: unknown Contributors: User:Techmdrn<br />

Image:SQLServer2008Logo.png Source: http://en.wikipedia.org/w/index.php?title=File:SQLServer2008Logo.png License: unknown Contributors: User:BJBot, User:FairuseBot,<br />

User:Rugby471, User:Soumyasch, User:Wikiolap<br />

Image:SQL Server FTS.svg Source: http://en.wikipedia.org/w/index.php?title=File:SQL_Server_FTS.svg License: GNU Free Documentation License Contributors: User:Soumyasch<br />

Image:SQLServerManagementStudio.JPG Source: http://en.wikipedia.org/w/index.php?title=File:SQLServerManagementStudio.JPG License: unknown Contributors: Mikeblas, Mwtoews,<br />

Soumyasch<br />

File:Scome.jpg Source: http://en.wikipedia.org/w/index.php?title=File:Scome.jpg License: Public Domain Contributors: Salem, Drew (Permission obtained from)<br />

Image:DTS Designer screenshot.PNG Source: http://en.wikipedia.org/w/index.php?title=File:DTS_Designer_screenshot.PNG License: unknown Contributors: User:Quadell<br />

image:FoxPro 2.6 Developers Guide Cover.png Source: http://en.wikipedia.org/w/index.php?title=File:FoxPro_2.6_Developers_Guide_Cover.png License: unknown Contributors:<br />

BillWSmithJr<br />

Image:Microsoft FoxPro for Macintosh.png Source: http://en.wikipedia.org/w/index.php?title=File:Microsoft_FoxPro_for_Macintosh.png License: unknown Contributors: MaGioZal, N.<br />

Harmonik<br />

File:Jet DLLs.svg Source: http://en.wikipedia.org/w/index.php?title=File:Jet_DLLs.svg License: Creative Commons Attribution-Sharealike 3.0 Contributors: User:Rugby471<br />

File:Referential integrity broken.png Source: http://en.wikipedia.org/w/index.php?title=File:Referential_integrity_broken.png License: GNU Free Documentation License Contributors:<br />

AutumnSnow<br />

Image:VisualFoxProScreenshot.png Source: http://en.wikipedia.org/w/index.php?title=File:VisualFoxProScreenshot.png License: unknown Contributors: SarekOfVulcan, Soumyasch, 2<br />

anonymous edits<br />

Image:VFPHelloWorld.png Source: http://en.wikipedia.org/w/index.php?title=File:VFPHelloWorld.png License: unknown Contributors: SarekOfVulcan<br />

Image:VFPDataHandling.png Source: http://en.wikipedia.org/w/index.php?title=File:VFPDataHandling.png License: unknown Contributors: SarekOfVulcan<br />

Image:WestClinTech box prod.jpg Source: http://en.wikipedia.org/w/index.php?title=File:WestClinTech_box_prod.jpg License: Creative Commons Attribution-Sharealike 3.0 Contributors:<br />

Sqltool


License 79<br />

License<br />

Creative Commons Attribution-Share Alike 3.0 Unported<br />

http:/ / creativecommons. org/ licenses/ by-sa/ 3. 0/

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!