Preview of SQL Server 2012, Codename Denali CTP 1 presented at PASS Summit 2010 in Seattle

This year’s PASS Summit again surpassed the former year’s one. And this was not only because of even more sessions, internationally well-known speakers and even more attendees. This November, the next release of SQL Server was officially being introduced to the public, and the first CTP is ready for download for the broad public.

The improvements and features are enormous. Developers can look forward to a new Development Environment (Project Juneau), and new capabilities and performance using the new Filetable-Feature, as well as super fast response through the new Column-Based Query Accelerator technology.

Analysis Services will be receiving a new engine, based on the Vertipaq (known from PowerPivot), called BI Semantic Model for easier development for less complex BI Projects. (The UDM will stay as an alternative)
Here is a link to the Technet article on “Analysis Services – Roadmap for SQL Server “Denali” and Beyond”.

Integration Services ware becoming a true windows service for central execution and management.


Reporting Services users and developers can look forward to an web-integrated report designer together with interactive and dynamic charts. (Project Crescent)

Administrators gain new possibilities regarding security with customizable Server roles and database-only users. Database-only users are especially meant to support the new “Contained database”-Feature, which eases the deployment and movement of databases together with the depending objects from server scope.
(You can find a good high-level overview on the log-on process of database-only users at this msdn blog-post: And here is a great blog-post, going through different scenarios with this feaure:

High Availability will be eased by combining the log-shipping, database-mirroring and Clustering features under a new concept of “Always on” technologies, which can be used to form a so called “Availability Group”.

Steffen Krause from Microsoft Germany has some more info on the Denali release and also shows demos in his webcasts:

If you want to check out the CTP yourself, here is the link:



Sarpedon Quality Lab

Scripting Table Data with SQL Server 2008 R2

I recently was asked, whether the Feature “Script Data” as T-SQL-command INSERT INTO… has been removed in SQL Server 208 R2.

In fact, it was not visible on first sight.

This is how you can find it:

It is still the right-click “Tasks” - “Generate Scripts” –Wizard.

After having chosen the Table(s), the following window appears:


there click “Advanced” and scroll down inside the “General”-part until the Element “Types of data” to script


And there under the following drop-down, it is hidden:


And the German translation “Datentypen, für die ein Skript erstellt wird”, makes it even harder to detect:


Conclusion: Scripting out Data with “INSERT INTO”-commands is a bit hidden – (under SQL 2008 it was under the “Table/View Options”, now under “General” – “Types of data to script”) but still available :-)

Addresses for geographical Data, ESRI-Shapefiles and other SQL Server geographical related stuff

SQL Server 2008 R2 Reporting Services supports the visualization of geographical data in 3 ways.

  • Datasets, based on the built-in .Net System-datatypes “geography” and “geometry”, which have been around since SQL Server 2008
  • via built-in maps – but only for the United States
  • via ESRI-Shapefiles, which one has to provide on his own

Now, where can you get those Shape-files?

Other, than in the USA where gathered data belongs to the people, with no cost (Census Bureau Geography), in other countries, such as in Germany, it is by far not easy, to even get such datat all.

In the following, I am collecting internet-sites, where one can find geographical data. I'd be happy to include more URLs, if you found a good one, to share.

Spatial Data at MIT

several links to other map-data, even outside US

free maps from around the world. political as well as physical, some even down to street-/building-level

Natural Earth

several maps of the world with borders and physical structure


maps of German "Wahlkreise", nice to play around with. They even include votes per area

various kinds of  datasets, also geographical, mainly German – mostly for a fee, but some is also free

Cities of the world database donated by

GeoLite Free Downloadable Databases

A shapefile of the TZ timezones of the world

Time Zone and Local Time - This service responds with the time zone and local time at the given latitude and longitude.




spatial datatype-extension for SQL Server 2005

Spatial Tools with Shapefile Uploader

Tools for importing ESRI-Shapefiles into SQL Server as well as for looking at the data


The other option to show geospatial data in Reports, is to just use plain geometry/geography data. Here are some resources that help in getting access to such and/or converting/”geocoding” data:

The Google Geocoding API

Rob Farley shows how you can geocode you address-data using bing-maps and powershell:

A nice walk-through in geocoding using SSIS and Google Geocoding API by Jeffrey Verheul:

Discussion on Mapping From City Name to Latitude and Longitude & Mapping From Latitude and Longitude to City with further links:



Further good articles concerning geographical data and SQL Server:

Creating your own SSRS map using Visio

Using Visio and SSRS Map Reports for Store Layouts etc.

Using ESRI ShapeFiles with SSI

For importing shape-files into SQL Server, see this blog-post at MSDN:

Achieve Spatial Data Support in SSIS:

Bridge The Gap between Bing and Google Maps using SSIS 

Heat Maps as Reports

Stacia Misner shows in her blog, how to include your maps in the Map-Gallery for the Map-Builder-Wizard:

If you are working with Polygons & Multpolygons, you should know how to check and correct an instance of geometry data for validity with .STValid() and .MakeValid() ad Jeffrey Verheul is showing is his post here:

Have fun with Reporting Services 2008 R2



Sarpedon Quality Lab

Integration Services: Looping & “continue on error”

Eine häufige Aufgabe bei der Arbeit mit Integration Services Paketen ist es, eine Routine in einer Schleife auszuführen.

Nehmen wir den konkreten Fall: ein For Each-Loop zum rekursiven Auslesen von Textdateien aus einer Verzeichnisstruktur und Verschieben an einen Zielort.

Wenn die Operation aufgrund von einer geöffneten Datei (z.B. der Log-Writer Prozess) fehlschlägt, schlägt damit der Task “Move file” fehl. Sodann der Container “For Each Loop”, und dann das gesamte Paket. Das ist das Standardverhalten: das Event “Error” wird propagiert.

Das sieht in etwa so aus (hier mit einen For Loop):


Man sieht trotz der versuchten “Fehlerbehandlung” in dem Script-Task “SCR-Fail” schlägt der Container fehl.

Das ist in diesem Fall aber nicht unbedingt das gewünschte Ergebnis.
Man möchte, das die Operation einfach mit der nächsten Datei fortfährt und eventuell liegengebliebene Dateien in einem späteren Durchlauf einfach holen.

Dafür muss man das propagieren des Fehlers auf Container-Ebene unterbinden. Die dafür extra vorhandene Systemvariable “Propagate” ist ausnahmsweise deswegen auch manuell änderbar. Allerdings gibt es diese nur in den Event Handlern.

Das heisst für den fehlschlagenen SQL-Task in diesem Beispiel ist ein EventHandler für “OnError” anzulegen. Dort findet man dann die besagte Variable und schaltet sie auf False



Das würde an sich schon genügen, um das Paket einfach weiterlaufen zu lassen.

Allerdings ist es in der Regel wünschenswert, im Anschluss eine bedingte Reaktion auf das erfolgreiche oder erfolglose Verschieben der Datei erfolgen zu lassen. In diesem Beispiel ein T-SQL-Schritt bei Erfolg, und der Script-Task “Fail” bei Misserfolg.

Da nun kein Fehler mehr propagiert wird, ist ein kleiner Kunstgriff vonnöten: Man definiert sich eine Variable, welche im Fehlerfall einen anderen Wert erhält und liest diese dann bei dem Precedence-Constraint zusätzlich mit aus.

Am einfachsten geht das mit dem im Fehlerfall ohnehin vorhandenen ErrorCode – innerhalb des EventHandler natürlich.

Dort leitet man den Wert der Systemvariable “ErrorCode” einfach in seine eigens zuvor angelegte User-Variable um:

Dts.Variables("User::ErrorCode").Value = Dts.Variables("System::ErrorCode").Value

Im ControlFlow wird dann ein “OnCompletion” – Precedence Constraint verwendet, und zusätzlich die Variable in der Expression "@[User::ErrorCode] != 0" ausgewertet

Das gewünschte Ergebnis verhält sich dann so:


Der Fehler im Task wird abgehandelt, und die Arbeit wird fortgesetzt.


happy coding :)


Andreas Wolter


Sarpedon Quality Lab

SQLCon Session “Anspruchsvollere Berichte mit Reporting Services 2008”

Auf der diesjährigen SQLCon in Mainz hielt ich die Session Anspruchsvollere Berichte mit Reporting Services 2008.


Themen waren:


–Mehrere Gruppen auf einer Achse
–Static Header – wie geht das jetzt?
–Listen (gruppieren)



–Dynamisches Wachstum
–Trendlines einbauen, Pareto-Charts
–Multiple Charts




–Varianten und Customizing



–Charts und Gauges innerhalb von Tablix (Microcharts)


Weitere „Angenehmlichkeiten“

–Felder in Page Header & Footer

Hinweise auf Weitere interessante Neuerungen

Ausblick SQL Server 2008 R2

–Map Control
–Componentizing Reports



bis zum Nächsten mal,


Andreas Wolter


Sarpedon Quality Lab