MS Database Software - Cultural View
MS Database Software - Cultural View
MS Database Software - Cultural View
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/