Skip to main content

SQL Server Chat: SQL Server 2005 Beta 2 CLR Q & A, sponsored by SSWUG

October 12, 2004

Published: October 21, 2004

Please note:Portions of this transcript have been edited for clarity

Introduction

Andy Q (Moderator):
Welcome to today’s chat. Our topic is SQL Server 2005 Beta 2 CLR Q & A, sponsored by the SQL Server WorldWide User Group (SSWUG). Questions, comments, and suggestions are welcome.

Andy Q (Moderator):
We are pleased to welcome our Experts for today’s chat. I will have them introduce themselves now.

Alazel (Expert):
Hello all. My name is Alazel Acheson. I'm a developer in the SqlClr group, focused primarily on the in-process ADO.Net provider.

Alessandro_MS (Expert):
Hi all, my name is Alessandro Catorcini, I am a program manager in the Common Language Runtime of the .NET Framework.

S_Wynkoop [SQLMVP] (Expert):
I'm Stephen Wynkoop, e-Editor for SSWUG.ORG and a Microsoft SQL Server MVP.

StephenD_MS (Moderator):
My name is Stephen Dybing. I'm the MVP Lead for SQL Server. Glad you could join us!

Vineet_MS (Expert):
Hello everybody, my name is Vineet Rao and I am a Program Manager in the Microsoft SQL Server Engine group.

Christian Kleinerman (Expert):
Hi I'm Christian Kleinerman, a Program Manager in the SQL Engine team, responsible for data access from within CLR integration.

Venkatesh_MS (Expert):
I'm a Program Manager in the SQL Engine team, I work on features related to programmability.

Balaji_MS (Expert):
Bio: I am a Group Program Manager in the SQL Server Engine team at Microsoft. Our team works primarily on Programmability features viz. T-SQL, CLR Integration, Fulltext and Security. For today's chat we will be focusing on CLR Integration features in SQL Server 2005.

Start of Chat

Balaji_MS (Expert):
Q:
will 2005 handle multiple column searches with one contains statement
A: Yes, you can now specify multiple columns in the contains clause with SQL 2005.

Alazel (Expert):
This chat is organized around the CLR hosting feature of SQL Server 2005. That's the area where the experts will be focusing their attention.

StephenD_MS (Moderator):
Q:
If one creates a schema using "CREATE SCHEMA schame_name" but does not specify an owner who owns that schema and the objects it contains? Also how does one change the owner of a SCHEMA?
A: I'm sorry, but we have CLR experts here, not metadata experts, so we cannot answer this question.

Balaji_MS (Expert):
Q:
I'd like to start simple: What is CLR and what are the advantages over SQL Server 2000
A: CLR is about an advanced programming platform: in terms of languages, APIs and tools; it enables a set of rich modern programming languages (C#, VB.NET, Managed C++), APIs (.NET framework library) and tools (Visual Studio.NET) to write programming logic in the database. Specifically, you will be able to write computation-intensive logic that is faster in CLR than in T-SQL; you will also be able to take advantage of the .NET framework APIs to solve some common programming tasks.

Alessandro_MS (Expert):
Q:
ignorant question: I realize that the whole idea behind "CLR" is "Common" language - but is VB.NET really VB.NET in SQL 2k5? In other words - can I completely apply what I know today about VB.NET inside SQL Server or is it a sub-set of statements?
A: Short answer: "Yes, you can". There are some parts of the libraries that do not make sense in the DB, and that are thus not allowed (e.g. WinForms), but the language that you use in the DB is VB.net (or C# or any language of your choice that targets the .NET Framework)

Alazel (Expert):
Q:
We have hundreds of DTS scripts for doing various tasks through out the day. How will the new DTS in 2005 affect our current DTS scripts?
A: I'm sorry, but we have CLR experts here, not DTS experts, so we cannot answer this question

StephenD_MS (Moderator):
Q:
Hi SQL 2005 team, are your going to put Visual Query Builder in Query Analyzer?
A: This is definitely not a CLR question. :-) You might ask over in the SQL Server 2005 Beta 2 newsgroups, http://www.microsoft.com/technet/community/newsgroups/server/sql.mspx

S_Wynkoop [SQLMVP] (Expert):
Q:
What is SQL Service Broker?
A: In a nutshell, it's a queuing mechanism for processes - it lets processes be handled more efficiently and works to address blocked processes (by queuing pending processes) and the like.

Balaji_MS (Expert):
Q:
Where can I find good examples of when writing a stored procedure or other SQL Server object in a .NET language would be CLEARLY preferable over using native T-SQL?
A: We are very close to publishing a white paper on this subject to MSDN (should be within a week or two). I will announce the availability of this paper in the Yukon beta newsgroups as soon as it is published. Please stay tuned to the newsgroups.

Alessandro_MS (Expert):
Q:
Suppose that I writing stored procedure using managed code (C#, for example).It am possible to call/use web service (say ASP.NET web service from other server on LAN, or from Internet) from this stored procedure. Is this scenario possible?
A: You can do this from a stored procedure of type External Access or Unsafe.

Venkatesh_MS (Expert):
Q:
Will it be possible to write a table function in a .NET language - that is a function that returns multiple rows of data to a query? If so, are there examples available now that would show how this could be done?
A: Yes, your function has to return an instance of type ISqlReader. The engine reads rows from the reader. Take a look at the stringutils sample that is included in the beta2 engine programmability samples, that shows you how to split a string and return a table with one column per element. You can also look at the BOL topic on CLR TVFs (ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/denet9/html/9a6133ea-36e9-45bf-b572-1c0df3d6c194.htm)

Vineet_MS (Expert):
Q:
There seems to be some confusion in the community about allowed assembly references for CLR objects, namely, is it limited to a specific list of allow assemblies or is any assembly with a certain combination of attributes permissible?
A: You are allowed to refer any assemblies and it is not limited to a certain combination. However, certain programming constructs would not be available in SAFE and EXTERNAL ACCESS mode.

Christian Kleinerman (Expert):
Q:
what tools for "throttling" sql 2k5 will be available - especially relative to locking down "run away" processes or the like? I'm hoping it's not perfmon counters....
A: A hard throttle/governor that will ensure a task won't consume more than x resources is not available. However, for a "run away" task the SQL Server scheduler will penalize it by reducing the CPU quantum assigned to it. For monitoring purposes there are Dynamic Management Views that will let you identify resources consumed by task.

Balaji_MS (Expert):
Q:
is managed code punished performance-wise, or is it more of a "guideline"?
A: Managed code is faster than T-SQL for computational tasks (assignments, conditional logic, arithmetic and string operations etc.)

Alazel (Expert):
Q:
How much of the core of sql server 2005 has been rewritten as managed code or is sql server 2005 just using managed code for sproc extensions, etc.
A: Managed code is primarily used as an extension mechanism. We haven't rewritten any of the core parts of the engine to take advantage of it. There are some system stored procedures written in managed code, and some of the technologies layered on top of the core, such as http support, make use of it as well.

Venkatesh_MS (Expert):
Q:
I have heard from various sources that there are “bugs” in the Beta 2 version of CLR based User Data Types. Can you summarize the user visible issues and enhancements that are targeted for the Beta 3 release?
A: The majority of planned enhancements (based on beta1 feedback) to CLR UDTs went into beta2. They include implicit conversion from string, udt validation, support for large values to/from udt methods, indexing support for udt expressions, etc. The major pieces planned for beta3 are (a) conversion to/from xml datatype, (b) better support for UDTs in SQL Workbench.

Balaji_MS (Expert):
Q:
is managed code punished performance-wise, or is it more of a "guideline"?
A: Continuing on my previous response, for data-access, managed is in general slower than T-SQL; there is overhead - additional code - involved in submitting SQL statements from managed code; this will be significant if your procedure submits a lot of SQL statements; more on this in the whitepaper that we are about to publish (please see my earlier response).

Balaji_MS (Expert):
Q:
Simple question: Why and when should I use the CLR features in SQL svr. 2005? Said in other words: Why should I want to use the CLR in SQL Svr 2005 instead of the CLR in windows?
A: Reposting my earlier response: We are very close to publishing a white paper on this subject to MSDN (should be within a week or two). I will announce the availability of this paper in the Yukon beta newsgroups as soon as it is published. Please stay tuned to the newsgroups.

Alessandro_MS (Expert):
Q:
Are there any differences in the security model from the real .net CLR to the SQL CLR?
A: Code Access Security is still in place and works as usual. There are some highly privileged operations that within the DB can only be performed by assemblies placed in the Unsafe category.

Alazel (Expert):
Q:
how the things will appear in the profiler accessing code written in VB or C#
A: Most of the profiler events should appear similar to the TSQL procedure execution events. You won't see statement-level events, nor the body of the procedure itself, but you should see procedure start, procedure end, etc. I'm not sure what indication profiler will give you that the procedure is .Net-based code.

S_Wynkoop [SQLMVP] (Expert):
Q:
What does Manage code mean ?
A: Code that is executed by the CLR. Managed code provides information (i.e., metadata) to allow the CLR to locate methods encoded in assembly modules, store and retrieve security information, handle exceptions, and walk the program stack. Managed code can access both managed data and unmanaged data. Managed data??? Memory that is allocated and released by the CLR using Garbage Collection. Managed data can only be accessed by managed code. Think "code behaving well" vs. "ad-hoc code behaving badly." (I borrowed this definition from developer.com :) )

Christian Kleinerman (Expert):
Q:
how does query optimizer handle code written in C# or VB.Net
A: The Query Optimizer (QO) optimizes query execution plans i.e. the query language (SELECT, INSERT, UPDATE, DELETE, etc). The procedural language for either TSQL or .Net languages doesn't go to the optimizer. Queries submitted from within VB/C# via the inproc provider are still TSQL and for execution get optimized by QO the same as if they were executed from TSQL procedure.

Alessandro_MS (Expert):
Q:
What assurances/tools will we have to make sure that the CLR won't hang up our server when a user writes poor code? Can the SQL Server integrated CLR be started/stopped without restarting the server?
A: There are extra features in the CLR that ensure that the CLR will never be able to kill the DB server process. If managed code fails, internal clean-up will kick in that will selectively abort the offending thread or app-domain. Furthermore, we have a system to detect and break deadlocks.

Vineet_MS (Expert):
Q:
What kind of debugging options do we have with managed code? Do we have to attach a debugger to the SQL Server process?
A: Visual Studio 2005 would provide support for debugging Transact SQL and CLR routines that are registered / running in SQL Server. The debugging in SQL Server follows per connection model. You can either debug the objects directly using Visual Studio Server Explorer or attach a client process and see / debug activities on the connections that client process makes. The debug engine inside sql server would provide an integrated t-sql / clr debugging experience.

Venkatesh_MS (Expert):
Q:
Suppose I run a query accessing a column of UDT. Could you provide a high level description on the process flow starting from SQL server receives the query and end with result set sent to client.
A: Depends on what the query is doing, if the query is along the lines of select udtcol from table where udtcol = 'some value', and the udt is comparable, we convert from string to udt, serialize, and then do a byte comparison to determine the rows that have to be returned. If the query invokes a udt method, i.e. select udtcol from table where udtcol.M1() = value, then we deserialize each instance and evaluate the expression. Assuming we send udt values to the client, if the client is ado.net sqlclient, reader.GetValue() will deserialize from the bytes and return an instance to the user.

Balaji_MS (Expert):
Q:
Are there any differences in the security model from the real .net CLR to the SQL CLR?
A: There are no fundamental differences; SQL Server adds an additional layer of Code Access Security (CAS) policy; this policy determines what CAS permissions are granted to a given assembly. The set of permissions granted by this policy will be intersected with the other existing policy layers (machine/user). You specify the SQL Server host policy by means of attaching one of 3 CAS permission sets (SAFE, External-access and Unsafe) when you create the assembly. SAFE grants only permission to execute and access local database; External-access grants additional CAS permissions that allow accessing OS resources (such as files, network) through Managed .NET Framework APIs. UNSAFE grants full trust and has no restrictions.

Alazel (Expert):
Q:
will the profiler show us also the CLR code that is running on the server just like it shows us the t-sql code that is running on the server?
A: It's not going to show you the actual source code for .Net procedures. You will be able to load the source code into the server and retrieve it, and the administrator will be able to see the code while debugging, however.

Venkatesh_MS (Expert):
Q:
In a Stored procedure can I mix T-SQL + VB.Net code ? How would it affect in terms of recompilation?
A: The managed stored procedure will be compiled to native code once, and will be recompiled only if the assembly is altered or the app domain is unloaded for some reason. The TSQL that is within the managed stored proc is sent through the TSQL language services, and the compiled plan is kept in the plan cache. It is subject to all the recompilation rules for regular TSQL batches.

Balaji_MS (Expert):
Q:
Are there any constraints put on a CLR call in terms of execution time, memory utilization that we should be aware of?
A: We don't have any constraints or governors for CPU/memory. We do have the ability to detect CLR threads that have not yielded execution for more than a certain hard-coded threshold and punish it from the scheduling perspective (it gets put at the end of the queue). We also have the ability to monitor the amount of memory usage (but not limit) by CLR.

StephenD_MS (Moderator):
Q:
What is the timeframe from Beta 3? (Ducking)
A: The publicly released date is still the 2nd half of this calendar year.

Christian Kleinerman (Expert):
Q:
The programming model for HTTP ENDPOINTS is only minimally documented in the BETA 2 CLR. Is the programming model for HTTP ENDPOINTS (eg. HTTP and SOAP extensions etc.) applicable to SQL Server 2005 web methods? What is targeted for change in the Beta 3
A: There is documentation in Books Online about CREATE ENDPOINT statement which shows you how to configure an http listener. In it you can expose stored procedures for execution as well as TSQL batches. You can also have a WSDL document generated which can then be consumed by Visual Studio or any other web service client. I'll pass along the feedback on documentation to the feature team.

Alessandro_MS (Expert):
Q:
I can't remember if I've read this or not: is CLR-based development restricted to the 2.0 version of the .NET framework or could existing versions of Visual Studio write assemblies for SQL Server 2005 to consume?
A: You will need Visual Studio 2005.

Venkatesh_MS (Expert):
Q:
In another database product (begins with "O" and rhymes with Boracle) I can create and compile java source, wrap it in a UDF, and execute it, all in SQL script. Any chance I'll be able to create / compile / wrap in UDF / execute CLR *all* from T-SQL?
A: :) Short answer is not in SQL Server 2005. Our solution is to use the mainstream VS.NET IDE and debugging tools for writing managed code.

Alessandro_MS (Expert):
Q:
When run a query involving CLR code ( UDT, UDP, UDF, UDA ), what memory is allocated by SQL server, what memory is allocated by CLR? How the thread pooling is handled?
A: All the memory is allocated by SQL Server. All the CLR allocations are delegated to SQL server. The same happens for the thread pool: all the resources are handled by the CLR through SQL.

Alazel (Expert):
Q:
will we have to have upgraded virus scanners running on our sql boxes to protect against CLR-borne viruses?
A: Sql won't be any more susceptible to external unauthenticated attacks due to CLR hosting -- you have to successfully authenticate before you can invoke any CLR-based features. For authenticated users, we're giving you controls that allow designate only specific users who will be able to load new code into the database (other users won't be able to provide a virus vector). The net result is that security is at least as good as Extended Procedures were in SQL Server 2000, and can be quite a bit better.

Alessandro_MS (Expert):
Q:
So If understand it right the managed code is not compiled and could be slower than the native T-SQL :S
A: You do not understand it right :-)

Managed code is compiled to Intermediate Language and is then compiled to binary code (optimized to the specific hardware) by the JIT (Just In Time) compiler when it is executed the first time. From there on, the code is 100% binary code.

Vineet_MS (Expert):
Q:
Is there a concept of "I'm a developer, so I can submit CLR assemblies" but they can't run until "I'm an admin, and I've tested it and approved it." - and if so, can we "allow" a specific developer more (or less) rights to activate their own assemblies?
A: We do not have an infrastructure that you can use to submit / test assemblies without making it available otherwise. You (developer/administrator) should fully test the assemblies before creating entry points to it.

You can, however, control the visibility of assemblies that allows you to control creation of entry points into the assembly

Christian Kleinerman (Expert):
Q:
Will the "best practices analyzer" (or some similar tool) help us to see what DTS packages and SPs are good candidates for updating to CLR routines, or is it going to be more experience-based (trial and error) in seeing what to update?
A: We will soon publish a document with some of the guidelines to decide when CLR is a good option. You'll see that there are many "it depends" and may be difficult for a tool like BPA to do a static recommendation. That said, this is good feedback and we'll check what degree of automated guidance we can provide for you.

Alessandro_MS (Expert):
Q:
Does that mean no object will be created in managed heap and no garbage collection needed in CLR running inside SQL server?
A: No, it means that the CLR manages the managed heap as usual, but that the managed heap memory is allocated through SQL Server. This ensures that the DB owns the control of the memory pressure and can interact with the CLR and the GC at low level.

Christian Kleinerman (Expert):
Q:
What kind of special relations are there between HTTP Endpoints and Windows Server 2003? How much HTTP Endpoint functionality is available with Windows XP? Any service pack requirements for the functionality?
A: HTTP endpoints in SQL Server 2005 builds on and requires the kernel model listener (aka http.sys) which initially only shipped on Windows Server 2003. This driver was included also in Windows XP SP2, which says that starting with SP2 you'll be able to use SQL HTTP ENDPOINTS.

Venkatesh_MS (Expert):
Q:
How are separate AppSpaces organized and managed in the SQL Server 2005 CLR? What will the supported models be for communication between CLR stored procedures?
A: Do you mean AppDomain? If so, they are not exposed in the programming model directly, so there is no concept of passing objects between app domains, etc. We will create one or more appdomains per database based on isolation, scalability and perf considerations. As far as communicating between procedures (or other objects for that matter), its all done using the TSQL application model, so parameters are passed by value and return results are returned by value. Procedures can return result sets directly to the client (just like TSQL procedures).

Balaji_MS (Expert):
Q:
Is there any concept of "signed" code for the CLR in SQL? Thinking about vendor applications...
A: We do support signed ("strongly named" in CLR parlance) assemblies in SQL Server; we do not however require code to be signed. If it is indeed signed, then the assembly's signature is verified when the database loads the assembly and hence provides stronger guarantees that the code has not been tampered with since it was signed by the author.

Vineet_MS (Expert):
Q:
Are there specific walkthroughs or examples of realistic debugging CLR code and distributed applications using CLR code with SQL Server 2005 in the pipeline?
A: Currently you can debug CLR code running inside SQL Server using Visual Studio. Visual Studio documentation would provide you with examples and walkthroughs for various debugging scenarios like debugging client apps / debugging the objects you just created in the database etc.

Balaji_MS (Expert):
Q:
Is it the goal to have more managed code (isn't that suggesting "code behaving well") or only use managed code for exceptions??
A: Considering that most of the code in the database is likely to be data-access intensive, in general you will use T-SQL as a starting point, but use CLR for selected areas of the code that are computation/logic intensive; a very common usage scenario is likely to be wrapping computational logic as user-defined functions which get called from T-SQL queries and statements;

Venkatesh_MS (Expert):
Q:
What use cases were envision for User Defined Types? I see some people thinking they would be a great way to move business logic in the DB directly. Is that a good idea?
A: UDTs are intended to extend the scalar (columnar) typesystem of the database (things like custom datetime/currency/string encoding/math/timespan/...) We explicitly recommend that you should not model your business objects (customer/order/etc.) as a UDT. Moving logic into the DB should be done only when appropriate (there are other responses in this chat about design considerations...)

Balaji_MS (Expert):
Q:
I get the sense that there is real uneasiness among administrators (and maybe even developers) about running CLR solutions. What is the likelihood of CLR in SQL Server 2005 receiving widespread adoption if many organizations and their DBAs disable CLR?
A: One of the reasons DBAs have expressed nervousness about the CLR is that it is too much of a black box; we have been working towards addressing this concern in beta 3 through a set of tools that allow DBAs to monitor and troubleshoot managed code running in SQL Server (profiler events, new dynamic management views).

Vineet_MS (Expert):
Q:
Maybe I'm being hopeful here, but can we reasonably expect "Express Manager" to offer step-through debugging for CLR objects?
A: It’s not in the current plans.

Venkatesh_MS (Expert):
Q:
Any chance there be any kind of tools to assist in altering datatypes (and even functions) that are built using the CLR? Even the T-SQL ones were a beast to deal with.
A: You should look at "ALTER ASSEMBLY". Note, it is aimed mainly at Servicing scenarios rather than wholesale upgrade of functionality in the assembly, you should use it when you need to deploy bugfixes, etc. For UDTs specifically, there is no support for structural changes to types that is baked in (remember they are supposed to model simple scalars to start with). You need to convert the value, drop the type, install the new type and migrate your data if needed (this is where the xml conversion support that is new in beta3 will come in handy).

Vineet_MS (Expert):
Q:
The SMO library documentation is currently “under construction.” Are there currently any other sources for SMO usage model other than the code examples?
A: As Kent mentioned: you can currently find information on http://www.sqldbatips.com/showarticle.asp?ID=35. by Jasper. The SQL Server Books Online should have the documentation soon.

Venkatesh_MS (Expert):
Q:
Adding to Kent's question about the single biggest piece of advice, how about Joe Average average data architect, especially when it comes to CLR udt's. Go nuts with them? Or use only sparingly when you have a very good case for them?
A: Please, please don’t go nuts with them... Use them when you really need to do something that the basic scalar types don't do (maybe a different range or precision or calendar or something like that). If you find yourself definining too many UDTs you should definitely stop and look at your scenario.

Balaji_MS (Expert):
Q:
What's the single biggest piece of advice you give "Joe Average" DBA about CLR functionality? How about Joe Average Developer?
A: I would suggest that DBAs and database developers start getting familiar with a managed programming language and the .NET framework . For mid-tier developers who are strong in .NET languages, I would suggest they should learn SQL; they should make sure they are not abusing procedural programming in the database (use SQL declarative querying as much as possible and use CLR as a way to complement it for logic that cannot be expressed efficiently within SQL). Basically we're trying to bridge the gap between database programming and mainstream application programming and the only way this can happen is if users on both sides of the fence get to understand and appreciate the strengths and weaknesses of the other.

Christian Kleinerman (Expert):
Q:
It was my understanding that some of the best candidates for CLR-based code are set-based operations. Is that correct still, or did I misunderstand?
A: Set-based operations, if you can perform them with a single set-based TSQL statement that is absolutely the way to go.

Iterating over a set from CLR-based code is interesting for scenarios where you need to do per-row computation that are not easily expressible with a UDF or a UDAggregate (or some other single-statement relational operation). Whether you iterate from TSQL using a cursor or from CLR using a SqlDataReader will depend on what exactly is that you're doing on a per-row basis (e.g. can you do it in TSQL, is it computation intensive, etc)

Alazel (Expert):
Q:
I would like to know if a singleton SP can be created and if it can notify connected clients. AKA does MS SQL 2005 allow hosting of business objects to create an N-tier environment
A: Not sure if I'm understanding your question correctly, but here goes: You can create an SP that will send information back to the client on the current connection (similar to what a bare SELECT would do).

You can create an SP that will send information back to the client on the current connection (similar to what a bare SELECT would do).

You can also use notification services to get notified of changes to data in a specific query.

Balaji_MS (Expert):
Q:
How extensive do you expect usage of the SQL Server 2005 will be in the next versions of other Microsoft Enterprise products? (eg. Project Server, Team System Foundation, etc.) One test of the applicability of the technology will be MS own adoption of it.
A: We expect at least 25 internal Microsoft applications to be deployed and in production between our beta 2 and our final release. We already have a major sales data warehouse application close to deployment using SQL Server 2005; "dogfooding" internal line-of-business applications before release has always been a practice with SQL Server in previous releases and will continue with the 2005 release.

Andy Q (Moderator):
Thanks for joining us today and thanks for the questions. It’s time for us to go now.

Andy Q (Moderator):
Thanks to our experts for joining today and thank you all!

Christian Kleinerman (Expert):
Thanks for joining in today, any other questions please send them to SQL Server 2005 newsgroups.

S_Wynkoop [SQLMVP] (Expert):
Thanks for coming everyone - hope to see you on future webcasts and webchats! ( www.sswug.org). We'll get the transcripts posted and let you know when they're available -- see you online!

Vineet_MS (Expert):
Thank you everyone for coming here today with your questions. Please use the newsgroups for any additional questions / feedback.

StephenD_MS (Moderator):
Thanks for joining us, see you in the newsgroups!

Balaji_MS (Expert):
Thanks for all the great questions. See you in the newsgroups.

Alazel (Expert):
Thanks for coming in.

Alessandro_MS (Expert):
Q:
Thanks to all of you - this was a good chat
A: Your most welcome. Thank you for the interesting questions.

Venkatesh_MS (Expert):
Q:
Thanks to all of you - this was a good chat
A: Signing off, thank you.

For further information on this topic or about SQL Server, please visit the following:

Newsgroups: http://www.microsoft.com/technet/community/newsgroups/server/sql.mspx

Website: http://www.microsoft.com/sql/default.mspx