Posts

SQL Server 2008 R2 - Application and Multiserver Management Learning Materials

My colleagues and I have been working with Microsoft to produce the Metro training materials for SQL Server 2008 R2. We’ve using those materials to train other trainers around the world. (If anyone will be in Reading in the UK next week, ping me and say “hi”. Same for London the following week).

Roger Doherty’s group have been hard at work turning these materials into consumable bite-sized pieces of training. This involves videos, demos and hands-on-labs.

2010-03-04

SQL Server Reporting Services: Should support include files

It’s common to want to embed custom code within reports in Reporting Services. One thing I don’t like is the inclusion of anything that looks like business logic directly in the reports. However, formatting functions, etc. seem totally appropriate.

If I want to embed custom code within Reporting Services though, I currently have two options. One is to embed the code in the report, the other is to reference an assembly. Each of these has drawbacks.

2010-02-19

DevWeek in London - coming up in March - early bird ends soon

DevWeek is on again this year.

Should be good to catch up with many of my European colleagues again. DevWeek is on March 15 - 19 at the Barbican Centre in London. The early bird pricing runs till 19th February.

A number of my colleagues will be speaking as well: Itzik Ben-Gan, Javier Loria and Davide Mauro.

I’m looking forward to seeing them and all the SQL crowd that will make it to London for the event.

2010-02-02

New entry in the unbelievably-misleading error message category: Windows 7 x64 RDP Client

I spent quite a while earlier trying to make an RDP connection to another system on my network. The error message from the RDP client was:

Your computer could not connect to another console session on the remote computer because you already have another console connection in progress.

You can imagine the range of things I tried to resolve the issue.

The actual issue? The machine had a new IP address and I was trying to connect to its old IP address. Great error message :-(

2010-01-23

SQL Server 2008 R2: StreamInsight Development Models

One thing that seems confusing to people when they first look at StreamInsight is that there are several development models:

  1. Implicit Server
  2. Explicit Server
  3. IObservable/IObserver 

Implicit server is fairly straightforward. You define your input stream and create a query to consume your output stream. StreamInsight does all of the heavy lifting associated with creating the server, binding your adapters, etc.

Explicit server is the most flexible but the most coding work. You specifically spin up (create and instantiate) a server object, from it spin up an application, register your input/output adapters and create them via a factory and spin up a query binding object. You use the query binding object to bind together your standing query (via a query template) and your input and output adapters. You use this query binding object to then create a query object (an instance of a query) which you then start/stop as required. With the explicit server model, you can get reuse of query templates, adapters, etc. and you can reuse an existing event stream for multiple queries. This model is also how you’d work with a server that’s not hosted in-process if that’s required.

2010-01-19

SQL Server 2008 R2 - StreamInsight - Event Payloads

One of the key decisions you’ll make when working with StreamInsight is the payload that will be carried by each event. Events contain and EventKind (which is related to whether they’re inserting a new event or modifying an existing one), some temporal information (depending upon the EventShape -> Point, Interval or Edge) and a payload that is user-defined.

A payload is defined via a .NET class or struct. In general, a class will be a better option as it ensures field ordering which is likely to be important for generic (vs typed) adapters. StreamInsight ignores anything except public fields and properties and there are limitations on the data types. For example, basic .NET types are permitted but not any of the nested types.

2010-01-16

SQL Server 2008 R2: Reporting Services - Pagination

Another item I had on the Connect site was about pagination. I wanted to be able to restart page numbering within a report. In my case, this was because I wanted to output a set of invoices in a single report but I wanted each invoice to have its own set of page numbers.

This was another item on Connect that came back saying “Done!”

And again, the team went further.

2010-01-13

SQL Server 2008 R2: Reporting Services - RenderFormat

I’m really happy with the Reporting Services team. I’ve had a few items on Connect where I’ve asked for features and they’ve come back and said “Done!”.

One of these is RenderFormat. I wanted the ability to change my formatting based upon where I was rendering to. For me, this came from a need to have quite different output when rendered to Excel than when rendered to HTML or PDF.

2010-01-13

SQL Server 2008 R2: StreamInsight Event Models - EventShapes

Continuing on the theme of describing StreamInsight, the next major concept is the Event Model. Events in StreamInsight are made up of two sets of data. One set is the basic information required by the StreamInsight engine such as when an event occurred. The other set is the user data contained within the events, called the “payload”.

You can define what is contained in the payload. It is effectively a .NET class or struct that exposes a set of public members. We’ll talk more about the payload in another post.

2010-01-13

SQL Server 2008 R2: What is StreamInsight used for

Since I posted some StreamInsight info the other day, I’ve had a bunch of people asking me what StreamInsight is used for.

StreamInsight is Microsoft’s implementation of Complex Event Processing. This is not a new market but it is new territory for Microsoft.

Complex Event Processing (CEP) is all about querying data while it’s still in flight. Traditionally, we obtain data from a source, put it into a database and then query the database. When using CEP, we query the data before it hits a database and derive information that helps us make rapid business decisions, potentially also including automated business decisions.

2010-01-11