<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Lewis Bruck's musings on SQL Server and .NET</title><subtitle type="html" /><id>http://blogs.msdn.com/lbruck/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/lbruck/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/lbruck/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2005-08-12T09:26:00Z</updated><entry><title>F# and SQL Server CLR integration (Part 1)</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/lbruck/archive/2006/05/25/607029.aspx" /><id>http://blogs.msdn.com/lbruck/archive/2006/05/25/607029.aspx</id><published>2006-05-25T15:04:00Z</published><updated>2006-05-25T15:04:00Z</updated><content type="html">&lt;P&gt;Please read my &lt;A HREF="/lbruck/archive/2006/05/24/606653.aspx"&gt;first post&lt;/A&gt; to understand the goals and security implications of the samples I am presenting.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;I will assume that you are in the sysadmin role on your SQL2005 server, you are using a program that allows you to execute TSQL commands (like Management Studio), and that you are running it on the same machine as your F# installation.&amp;nbsp; Change any paths to be appropriate to your machine.&lt;/P&gt;
&lt;P&gt;First of all, you need to turn on CLR support in SQL2005:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;sp_configure 'clr enabled', 1&lt;BR&gt;go&lt;BR&gt;reconfigure&lt;BR&gt;go&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;Next, you need to create a database and allow the execution of "unsafe" assemblies in it.&amp;nbsp; There is a more sophisticated (and complicated) method involving signing the unsafe assemblies with a key and then granting the appropriate permissions to that key, but for testing purposes I will go the simple route:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P dir=ltr&gt;&lt;FONT face="Courier New"&gt;create database fsharp&lt;BR&gt;go&lt;BR&gt;alter database fsharp set trustworthy on&lt;BR&gt;go&lt;BR&gt;use fsharp&lt;BR&gt;go&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;Now you need to load the two utility libraries used by most F# programs into the database:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P dir=ltr&gt;&lt;FONT face="Courier New"&gt;create assembly fslib from 'c:\fsharp\fsharp-1.1.11.7\bin\fslib.dll' with permission_set = unsafe&lt;BR&gt;go&lt;BR&gt;create assembly mllib from 'c:\fsharp\fsharp-1.1.11.7\bin\mllib.dll' with permission_set = unsafe&lt;BR&gt;go&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;Now you are ready to write your first F# stored procedure.&amp;nbsp; Create a file called sqlclr.fs (the name is important) with following code:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P dir=ltr&gt;open System&lt;BR&gt;open System.Data&lt;BR&gt;open System.Data.Sql&lt;BR&gt;open System.Data.SqlTypes&lt;BR&gt;open Microsoft.SqlServer.Server&lt;BR&gt;&lt;BR&gt;[&amp;lt;SqlProcedure&amp;gt;]&lt;BR&gt;let printToday() =&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;SqlContext.Pipe.Send(DateTime.Now.ToString())&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;Compile this into a DLL.&amp;nbsp; To load and test out the procedure, issue the following commands:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P dir=ltr&gt;&lt;FONT face="Courier New"&gt;create assembly sqlclr from 'c:\fsharp\sqlclr\sqlclr.dll' with permission_set =&amp;nbsp;unsafe&lt;BR&gt;go&lt;BR&gt;create procedure PrintToday external name sqlclr.sqlclr.PrintToday&lt;BR&gt;go&lt;BR&gt;exec PrintToday&lt;BR&gt;go&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;I won't go into all of the details of SQL CLR integration at this point, I want to point out some important facts.&amp;nbsp; CLR stored procedures have to be static functions; this works well with normal F# functions since they are defined this way.&amp;nbsp; By default, they get created in&amp;nbsp;a class with the same name as the source file;&amp;nbsp; the name of that class&amp;nbsp;must be used as&amp;nbsp;the second part of the external name of the stored procedure.&lt;/P&gt;
&lt;P dir=ltr&gt;This has been a lot of setup work for very little immediate reward, but it lays the foundation for what I'll present in future posts.&amp;nbsp; Next, I will demonstrate less trivial (and more useful) user-defined functions in F#.&lt;/P&gt;
&lt;P dir=ltr&gt;&amp;nbsp;&lt;/P&gt;
&lt;P dir=ltr&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=607029" width="1" height="1"&gt;</content><author><name>lbruck</name><uri>http://blogs.msdn.com/members/lbruck.aspx</uri></author><category term="F#" scheme="http://blogs.msdn.com/lbruck/archive/tags/F_2300_/default.aspx" /></entry><entry><title>F# and SQL Server CLR integration (Part 0)</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/lbruck/archive/2006/05/24/606653.aspx" /><id>http://blogs.msdn.com/lbruck/archive/2006/05/24/606653.aspx</id><published>2006-05-25T03:55:00Z</published><updated>2006-05-25T03:55:00Z</updated><content type="html">&lt;P&gt;One of the many features in SQL2005 is the ability to create stored procedures, functions (UDFs), and user-defined data types (UDTs)&amp;nbsp;in any .NET language.&amp;nbsp; As might be expected, most of the examples available are in C# and Visual Basic.&amp;nbsp; However, I think that F# should get equal representation, especially since I think that certain features of F# can make it a great language for this:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Object expressions to make it easier to re-use "boiler-plate" code for UDTs&lt;/LI&gt;
&lt;LI&gt;Easy IEnumerable&amp;lt;&amp;gt; functions for table-valued functions&lt;/LI&gt;
&lt;LI&gt;Compositional pickling for simpler binary serialization&lt;/LI&gt;
&lt;LI&gt;Integration with LINQ for more sophisticated query processing in UDFs&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;There are still some technical challenges that need to be addressed before F# can be used&amp;nbsp; as a general purpose language with SQL2005 CLR.&amp;nbsp; The biggest problem is that SQL2005 is very strict about the IL it allows to run since it runs "in-process" on the server and the classes and assemblies used can be shared&amp;nbsp;between multiple users.&amp;nbsp; Currently, F# runs afoul of one of the checks:&amp;nbsp; all static fields must be marked as readonly.&amp;nbsp; This restriction&amp;nbsp;is to make sure that one&amp;nbsp;user can't change the contents of a shared class being used by other users.&amp;nbsp; Don Syme is aware of the problem and working on a solution (no release date, yet).&lt;/P&gt;
&lt;P&gt;However, with the release of 1.1.11.7, it is possible to start experimenting with F# and SQL2005 by disabling or bypassing the CLR security checks.&amp;nbsp; By disabling the checks, we can use F#-generated assemblies at the risk of compromising the server.&amp;nbsp; Therefore, I can't recommend this in a production environment&amp;nbsp;unless you have a very clear understanding of the security and stability implications and consequences&amp;nbsp;of the various methods of disabling the checks.&amp;nbsp; See the SQL2005 documentation for more details.&lt;/P&gt;
&lt;P&gt;With these caveats, I'm going to present some sample F# programs&amp;nbsp;which implement SQL2005 CLR objects.&amp;nbsp; These can be run on any SQL2005 installion (including the free Express Edition).&amp;nbsp; They require the use of .NET 2.0 (aka Whidbey) (another free download).&lt;/P&gt;
&lt;P&gt;My plan is to have four more posts over the next week:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Setup and a simple stored procedure&lt;/LI&gt;
&lt;LI&gt;User defined functions (both scalar- and table-valued)&lt;/LI&gt;
&lt;LI&gt;User defined data types&lt;/LI&gt;
&lt;LI&gt;User defined aggregate functions&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;I hope that this alternative look at F#/.NET interoperability will be interesting.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=606653" width="1" height="1"&gt;</content><author><name>lbruck</name><uri>http://blogs.msdn.com/members/lbruck.aspx</uri></author><category term="F#" scheme="http://blogs.msdn.com/lbruck/archive/tags/F_2300_/default.aspx" /></entry><entry><title>Generating a table of integers</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/lbruck/archive/2005/11/09/491153.aspx" /><id>http://blogs.msdn.com/lbruck/archive/2005/11/09/491153.aspx</id><published>2005-11-10T07:22:00Z</published><updated>2005-11-10T07:22:00Z</updated><content type="html">&lt;P&gt;Generating a sequence of integers as a table is a useful utility to have.&amp;nbsp; Historically, this was done either by having a temporary table or falling back to a TSQL while loop.&amp;nbsp; However, the UDT feature in SQL2000 and the CTE (common table expression) feature in SQL2005 make it easy to write a function that does this without explicitly looping or materializing the sequence.&lt;/P&gt;
&lt;P&gt;Here is the code:&lt;/P&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#000000&gt;alter&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;function&lt;/FONT&gt;&lt;FONT size=2&gt; Ints&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;@n &lt;/FONT&gt;&lt;FONT size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;returns&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;table&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;as&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#000000&gt;return&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#000000&gt;with&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; Digits &lt;/FONT&gt;&lt;FONT size=2&gt;as&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#000000 size=2&gt;(&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&amp;nbsp; 0 &lt;/FONT&gt;&lt;FONT size=2&gt;as&lt;/FONT&gt;&lt;FONT size=2&gt; num &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;union&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;all &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp; 1 &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;union&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;all &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp; 2 &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;union&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;all &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp; 3 &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;union&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;all&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;union&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;all &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp; 5 &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;union&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;all &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp; 6 &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;union&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;all &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp; 7 &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;union&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;all&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp; 8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;union&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;all &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp; 9 &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;union&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;all &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt; 10 &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;union&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;all &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt; 11 &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;union&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;all&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt; 12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;union&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;all &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt; 13 &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;union&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;all &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt; 14 &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;union&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;all &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt; 15&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#000000 size=2&gt;),&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;Numbers &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;as&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#000000 size=2&gt;(&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#000000&gt;d7&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;num &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 16 &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 16 &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 16 &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 16 &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 16 &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 16 &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 16&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;+&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; d6&lt;/FONT&gt;&lt;FONT size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;num &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 16 &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 16 &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 16 &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 16 &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 16 &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 16&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;+&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; d5&lt;/FONT&gt;&lt;FONT size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;num &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 16 &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 16 &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 16 &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 16 &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 16&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;+&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; d4&lt;/FONT&gt;&lt;FONT size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;num &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 16 &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 16 &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 16 &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 16&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;+&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; d3&lt;/FONT&gt;&lt;FONT size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;num &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 16 &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 16 &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 16&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;+&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; d2&lt;/FONT&gt;&lt;FONT size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;num &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 16 &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 16&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;+&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; d1&lt;/FONT&gt;&lt;FONT size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;num &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 16&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;+&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; d0&lt;/FONT&gt;&lt;FONT size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;num &lt;/FONT&gt;&lt;FONT size=2&gt;as&lt;/FONT&gt;&lt;FONT size=2&gt; num&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;from&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; Digits d0 &lt;/FONT&gt;&lt;FONT size=2&gt;cross&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;join&lt;/FONT&gt;&lt;FONT size=2&gt; Digits d1 &lt;/FONT&gt;&lt;FONT size=2&gt;cross&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;join&lt;/FONT&gt;&lt;FONT size=2&gt; Digits d2 &lt;/FONT&gt;&lt;FONT size=2&gt;cross&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;join&lt;/FONT&gt;&lt;FONT size=2&gt; Digits d3 &lt;/FONT&gt;&lt;FONT size=2&gt;cross&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;join&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Digits d4 &lt;/FONT&gt;&lt;FONT size=2&gt;cross&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;join&lt;/FONT&gt;&lt;FONT size=2&gt; Digits d5 &lt;/FONT&gt;&lt;FONT size=2&gt;cross&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;join&lt;/FONT&gt;&lt;FONT size=2&gt; Digits d6 &lt;/FONT&gt;&lt;FONT size=2&gt;cross&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;join&lt;/FONT&gt;&lt;FONT size=2&gt; Digits d7&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;where&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;d7&lt;/FONT&gt;&lt;FONT size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;num &lt;/FONT&gt;&lt;FONT size=2&gt;&amp;lt;=&lt;/FONT&gt;&lt;FONT size=2&gt; @n &lt;/FONT&gt;&lt;FONT size=2&gt;/&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;4096 &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 65536&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#000000&gt;and&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; d6&lt;/FONT&gt;&lt;FONT size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;num &lt;/FONT&gt;&lt;FONT size=2&gt;&amp;lt;=&lt;/FONT&gt;&lt;FONT size=2&gt; @n &lt;/FONT&gt;&lt;FONT size=2&gt;/&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;256 &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 65536&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#000000&gt;and&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; d5&lt;/FONT&gt;&lt;FONT size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;num &lt;/FONT&gt;&lt;FONT size=2&gt;&amp;lt;=&lt;/FONT&gt;&lt;FONT size=2&gt; @n &lt;/FONT&gt;&lt;FONT size=2&gt;/&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;16 &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; 65536&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#000000&gt;and&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; d4&lt;/FONT&gt;&lt;FONT size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;num &lt;/FONT&gt;&lt;FONT size=2&gt;&amp;lt;=&lt;/FONT&gt;&lt;FONT size=2&gt; @n &lt;/FONT&gt;&lt;FONT size=2&gt;/&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;65536&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#000000&gt;and&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; d3&lt;/FONT&gt;&lt;FONT size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;num &lt;/FONT&gt;&lt;FONT size=2&gt;&amp;lt;=&lt;/FONT&gt;&lt;FONT size=2&gt; @n &lt;/FONT&gt;&lt;FONT size=2&gt;/&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;4096&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#000000&gt;and&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; d2&lt;/FONT&gt;&lt;FONT size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;num &lt;/FONT&gt;&lt;FONT size=2&gt;&amp;lt;=&lt;/FONT&gt;&lt;FONT size=2&gt; @n &lt;/FONT&gt;&lt;FONT size=2&gt;/&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;256&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#000000&gt;and&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; d1&lt;/FONT&gt;&lt;FONT size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;num &lt;/FONT&gt;&lt;FONT size=2&gt;&amp;lt;=&lt;/FONT&gt;&lt;FONT size=2&gt; @n &lt;/FONT&gt;&lt;FONT size=2&gt;/&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;16&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#000000&gt;and&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; d0&lt;/FONT&gt;&lt;FONT size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;num &lt;/FONT&gt;&lt;FONT size=2&gt;&amp;lt;=&lt;/FONT&gt;&lt;FONT size=2&gt; @n&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#000000 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;*&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT size=2&gt;from&lt;/FONT&gt;&lt;FONT size=2&gt; Numbers &lt;/FONT&gt;&lt;FONT size=2&gt;where&lt;/FONT&gt;&lt;FONT size=2&gt; num &lt;/FONT&gt;&lt;FONT size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT size=2&gt; @n&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT face="Times New Roman" size=3&gt;
&lt;P&gt;For instance, if you really wanted to know what the harmonic series sum(1/n) from 1 to 1,000,000, then you could run the following query:&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New" size=2&gt;select&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; sum(1.0 / (1.0 + num)) from Ints(1000000)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT face="Times New Roman"&gt;It comes back with the answer (14.39272671788580) in under two seconds on AMD 4200 X2.&amp;nbsp; It automatically parallelized the query since two cores are available.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT face="Times New Roman"&gt;I am going to use this function in further notes on using SQL queries for unorthodox purposes.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=491153" width="1" height="1"&gt;</content><author><name>lbruck</name><uri>http://blogs.msdn.com/members/lbruck.aspx</uri></author><category term="SQL Tips" scheme="http://blogs.msdn.com/lbruck/archive/tags/SQL+Tips/default.aspx" /></entry><entry><title>Welcome to my blog</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/lbruck/archive/2005/08/12/450906.aspx" /><id>http://blogs.msdn.com/lbruck/archive/2005/08/12/450906.aspx</id><published>2005-08-12T19:26:00Z</published><updated>2005-08-12T19:26:00Z</updated><content type="html">I am an SDET&amp;nbsp;(aka tester)&amp;nbsp;in the SQL Server Storage Engine group.&amp;nbsp; I want to use the blog to share what I find interesting, useful, or exciting about SQL2005, .NET, C#, or databases in general.&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=450906" width="1" height="1"&gt;</content><author><name>lbruck</name><uri>http://blogs.msdn.com/members/lbruck.aspx</uri></author></entry></feed>