Archiv

Archive for the ‘T-SQL’ Category

Prüfung 70-461 bestanden: Querying Microsoft SQL Server 2012 / 2014

Ich habe vor kurzem die Microsoft Zertifizierung 70-461 bestanden und möchte kurz reflektieren wie ich die Prüfung erlebt habe. Darüberhinaus möchte ich Tipps zur Vorbereitung geben.

Material zur Vorbereitung

Ich habe mir die von Microsoft zur Verfügung gestellten Video angeschaut: MCSA Certification Prep | Exam 461: Querying Microsoft SQL Server 2012
und https://www.youtube.com/watch?v=cZVtrjDOEeo. Auf der Microsoft Virtual Academy gibt es auch noch ein Trainingsvideo.

Dann habe ich mir das Buch Exam 70-461 – Querying Microsoft SQL Server 2012 von Microsoft gekauft. Ich kann dieses Buch für alle empfehlen, die nicht nur die Prüfung bestehen wollen, sondern den Inhalt auch verstehen, anwenden und behalten wollen. Itzik Ben-Gan und seine Co-Autoren haben ein gutes Buch geschrieben, wofür es hier ein Probekapitel zu lesen gibt.

Buch zu 70-461

Bei Measure Up habe ich mir einen Praxistest für die Zertifizierung gekauft. Der Praxistest besteht aus simulierten Prüfungen, es gibt dabei einen Trainings- und einen Prüfungsmodus. Die Fragen werden aus einem Pool von insgesamt 172 Fragen geschöpft. Nach der Durchführung kann man sich anzeigen lassen, warum eine gewählte Option richtig oder falsch war. Es gibt auch andere Anbieter wie z.B. Mindhub. Aufgepasst: Diese Praxistest sind recht gut um zu üben, was aber fehlt sind die Live-Coding Fragetypen einer echten Prüfung. Also: öfters mal das SQL Server Management Studio aufmachen und die Dinge nachpogrammieren und ausprobieren.

Ich habe bewusst keine Brain Dumps verwendet. Mein Ziel – neben dem Bestehen der Prüfung – war auch möglichst viel zu lernen und zu üben. Was natürlich sehr hilfreich ist, wenn man praktische Erfahrung mit dem SQL Server, auch mit älteren Versionen, hat.

Den Prüfungstermin habe ich hier festgelegt und gebucht.

Prüfungsrelevante Themen

  • Windows Functions und Ranking Functions
  • Transaction Isolation Levels
  • Indexierte Views
  • Sequence Object
  • CTEs
  • Merge
  • Trigger
  • COALESCE, IIF, ISNULL
  • Union, Union all, Intersect, Except
  • Datentypen
  • Errorhandling
  • Datenintegrität erzwingen (Constraints)
  • Vergleichsoperatoren mit ALL, SOME, ANY, NOT IN
  • Table valued functions
  • Cross Apply und Outer Apply
  • For XML

Eine gute Zusammenstellung der relevanten Themen findet man ebenfalls hier.

Prüfung

Die Prüfung ging 120 Minuten und bestand aus 53 Fragen. Sie besteht aus folgenden Teilbereichen:

  1. Troubleshoot and Optimize (25-30%)
  2. Create Database Objects (20-25%)
  3. Modify Data (20-25%)
  4. Work with Data (25-30%)

Folgende unterschiedliche Typen von Fragen waren zu bearbeiten:

  • Auswahl aus mehreren Optionen
  • Multiple Choice
  • T-SQL Code schreiben. Meist mussten Queries ergänzt oder korrigiert werden. Dass man Code während der Prüfung schreiben muss, war mir neu.
  • Drag & Drop von Code Sequenzen

Tipps

In der Rückschau war meine Vorbereitung in Ordnung. Nur bei der Prüfung ist mir die Zeit davon gelaufen. Ich habe den Fehler gemacht, alle Fragen nacheinander zu beantworten, auch die schweren und zeitintensiven. Mein Tipp für die Prüfung: Zuerst die einfachen Fragen machen und dann in einer zweiten Runde die zeitintensiven Fragen. Ausserdem würde ich vor der Prüfung noch mehr Code Beispiele machen. Die Prüfung ist machbar, jedoch sollte man sie nicht unterschätzen.

Ich hoffe dieser Artikel hilft, wenn jemand die Zertifizierung 70-461 machen möchte. Über Feedback würde ich mich freuen.

 

Advertisements

Training in Zürich zu neuer Datenmodellierungsmethode: Data Vault

Wikipedia definiert Data Vault so:

In den letzten Jahren hat sich mit Data Vault eine neue Modellierungstechnik für Data-Warehouse etabliert, die insbesondere für agile Datawarehouse geeignet ist. Sie bietet eine hohe Flexibilität bei Erweiterungen, eine vollständige Historisierung der Daten und erlaubt eine starke Parallelisierung der Datenladeprozesse.

Meine persönliche Erfahrung ist, dass Data Vault nicht nur bei einem Data-Warehouse eingesetzt werden kann, sondern auch bei Schnittstellen von OLTP-Systemen, welche Daten von anderen Systemen beziehen. Mit Data Vault bekommt man die Möglichkeit, die Qualität der Belieferung der Schnittstellen automatisiert zu überprüfen und zu messen.

DataVault

Im Frühjahr gibt es vom Buchautor Hans Hultgren ein dreitägiges Training in Zürich zur Data Vault Modellierung. Anschließend findet eine Prüfung zur Zertifizierung statt. Interessant ist das Thema für Daten Architekten, Datenbank Programmierer, Data Warehouse Architekten, Business Intelligence Consultants und für alle die mit dem Design und Implementieren von Daten-Schnittstellen und BI-Systemen zu tun haben.

Der Trainer, Hans Hultgren, berät seit über 20 Jahren Firmen im Bereich Data Warehouse und Business Development. Hans Hultgren hat ein Buch über das Thema „Modeling the Agile Data Warehouse With Data Vault“ geschrieben. Ich habe das Buch gelesen, ich kann es nur empfehlen.

Außerdem schreibt Hans Hultgren in seinem Blog (https://hanshultgren.wordpress.com/) regelmäßig über das Thema Data Warehousing und Data Vault.

 

 

Fallstricke der T-SQL Funktion isNumeric() – was ist zu beachten?

Manchmal geht man davon aus, dass die mitgelieferte Funktionen des SQL Servers das tun, was sie sollen. Aber dieses erwartete Verhalten trifft nicht immer zu. Wie im vorliegenden Fall der Funktion isNumeric.

Was habe ich erwartet: Ich habe erwartet, dass die Funktion isNumeric den übergebenen Parameter auswertet und als Resultat entweder 1 oder 0 zurückgibt, je nachdem ob es sich um einen numerischen Wert handelt, oder nicht.

Wie ist das Verhalten: Leider funktioniert die Funktion isNumeric nicht immer richtig – oder noch schlimmer, es werden Fehler geworfen (beim Datentyp date), wo man es absolut nicht erwartet.

Beispiele

T-SQL Code Datentyp Ergebnis Bemerkung
declare @myAttribute as decimal(18,6) = 123456789012.123456; select isnumeric (@myAttribute); decimal 1 korrekt
declare @myAttribute as date = ‚2016-02-17‘; select isnumeric (@myAttribute); date kein Folgender Fehler wird geworden: Msg 8116, Level 16, State 1, Line 8 Argument data type date is invalid for argument 1 of isnumeric function.
declare @myAttribute as datetime = CURRENT_TIMESTAMP; select isnumeric (@myAttribute); datetime 0 korrekt – erstaunlich, dass datetime geht und date nicht …
declare @myAttribute as varchar(12) = ‚Hallo‘; select isnumeric (@myAttribute); varchar 0 korrekt
declare @myAttribute as varchar(12) = ‚4711‘; select isnumeric (@myAttribute); varchar 1 korrekt. D.h. mit isnumeric lassen sich auch varchar-Variablen untersuchen.
declare @myAttribute as varchar(12) = ‚€4711‘; select isnumeric (@myAttribute); varchar 1 korrekt. Trotzdem hätte ich hier evtl. eine 0 erwartet. In der Dokumentation von Microsoft kann man nachlesen, das die führende Zeichen wie +, – sowie Währungssymbole nicht ausgewertet werden.

Nun könnte man ja auf die Idee kommen, zuerst mit der Funktion SQL_VARIANT_PROPERTY den Datentypen zu checken:

declare @myAttribute as date = '2016-02-17'
if SQL_VARIANT_PROPERTY(@myAttribute,'BaseType') not in ('decimal','numeric','float','real','int','bigint','smallint','tinyint','money','smallmoney')
 print 'not a numeric type'
else
 select isnumeric(@myAttribute)

Doch auch hier wird der Ausruck ausgewertet und ein Fehler geworfen:
Msg 8116, Level 16, State 1, Line 6
Argument data type date is invalid for argument 1 of isnumeric function.

Als nächstes habe ich das gleiche mit einem CASE Statement versucht. Aber auch hier gibts eine Fehlermeldung:

declare @myAttribute as date = '2016-02-17'
SELECT
 CASE 
  WHEN SQL_VARIANT_PROPERTY(@myAttribute,'BaseType') 
      not in ('decimal','numeric','float','real','int','bigint','smallint','tinyint','money','smallmoney') THEN 0
  ELSE isnumeric(@myAttribute)
 END AS isAttributeNumeric

Msg 8116, Level 16, State 1, Line 3
Argument data type date is invalid for argument 1 of isnumeric function.

Fazit

Mein Fazit: Die Funktion isNumeric ist mit Vorsicht zu geniessen. Wenn sie eingesetzt wird, dann muss man sehr gut testen. Insbesondere muss sichergestellt werden, dass nie ein Parameter vom Datentyp date an die Funktion übergeben wird. Dann nämlich knallts und ein Fehler wird geworfen.  Falls SQL Server 2012 oder höher eingesetzt wird, gibt es hier eine Empfehlung immer TryParse anstatt isNumeric einzusetzen.