Archiv

Autor-Archiv

Virtual Data Warehousing Training von Roelant Vos

Vom 19.-21. Juni 2019 habe ich in Utrecht (Holland) am Training „Virtual Data Warehousing – Implementation and Automation“ von Roelant Vos teilgenommen. Mein Fazit vorweg: Das Training ist klasse und jeden Cent wert. Ich kann das jeder/jedem nur weiterempfehlen! Doch der Reihe nach …

Roelant Vos

Da Roelant Vos Data Vault nur ganz kurz erklärt, empfiehlt es sich jedoch vor diesem Training einen der folgenden Kurse besucht zu haben:

Der Kurs Virtual Data Warehousing besteht aus einer Mischung von Theorie, Demos und Hands-On-Workshops und vermittelt wie ein Virtual Data Warehouse implementiert und automatisiert werden kann. Extrem cool finde ich, dass Roelant viele Dinge als Open Source bereitstellt und dadurch versucht eine Community aufzubauen:

Das Virtual Data Warehouse, wie es Roelant Vos erklärt, erlaubt es das Data Warehouse zu überarbeiten (to be refactored) und komplett neu zu laden und zwar in einer deterministischen (vorhersagbaren) Art und Weise. Dies wird durch die Verwendung einer Persistent Staging Area (PSA) erreicht. In dieser PSA werden alle Daten auf dem untersten Level (Granularität) jeweils als Delta gespeichert, also als CREATE, UPDATE und DELETE Records. Auch werden die LoadDate-Timestamps bereits in der PSA abgelegt. Wenn das Quellsystem die Daten jeweils als Snapshot (FULL) liefert, kann mit einem CDC-Interface (Change Data Capture) gearbeitet werden um die Daten für die PSA aufzubereiten. Dabei werden ausschliesslich Hard Rules angewendet, wie z.B. die korrekte Formatierung des Datums etc. Soft Rules, welche die Daten interpretieren oder ableiten sind innerhalb der PSA nicht erlaubt. Die PSA ist eine notwendige Komponente für das Virtual Data Warehouse. Eine transiente Staging Area kann der PSA vorgeschaltet werden. Ggf. können die Satelliten (SAT) des Raw Vaults als Views auf die PSA implementiert werden.

Wir haben im Kurs gelernt:

  • Wie die Architektur eines Virtuellen Data Warehouses aussehen kann
  • Welche Patterns es gibt (Patterns based design)
  • Warum es eine PSA benötigt
  • Welche Optionen es bei der Implementierung eines Data Vaults (Raw Vault und Business Vault) gibt und dass es nicht nur die eine, richtige Lösung gibt
  • Wie wir mit Metadaten und einem Generator (z.B. HandleBars) alles selbst generieren können
  • Wie ETL automatisiert generiert werden kann
  • Wie Ladejobs orchestriert, automatisiert und parallelisiert werden können
  • Dass alles DevOps fähig implementiert werden kann und soll
  • Wenn JSON Files für die Mappings zwischen Quelle und Ziel generiert werden, dann können diese in einer Source-Code Verwaltung wie z.B Git gespeichtert werden. Das ist eine wichtige Voraussetzung für die Automatisierung mit DevOps.
  • Dass es möglich ist einen Teil der Daten nachträglich zu laden und trotzdem die Daten in der richtigen Reihenfolge ausgewertet werden können
  • All is about iterations and DevOps!
Quelle: http://roelantvos.com/blog/design-decisions/

Wie eingangs erwähnt: Ich darf mich glücklich schätzen, dieses Training besucht zu haben und kann die von Roelant Vos vorgestellte Vorgehensweisen nur weiterempfehlen.

Und zum Schluss noch ein Tipp: Am 2. Juli 2019 gibt es ein Meetup der deutschsprachigen Data Vault User Group (DDVUG) zum Thema Data Vault Options & Considerations mit Roelant Vos.

Global Azure BOOTCAMP in Zürich

Am letzten Samstag, den 27. April 2019, habe ich am Global Azure BOOTCAMP in Zürich teilgenommen. Es war eine tolle Veranstaltung mit über 320 Teilnehmern, 3 parallelen Tracks und 19 Vorträgen rund um Azure. Organisiert wurde das Global Azure BOOTCAMP von der Microsoft Azure Zürich User Group.

Die 22 Speaker haben es verstanden die neuen Features zu zeigen und zu erklären. Sehr gefallen haben mir auch die etlichen Vorträge über den Einsatz von Azure in der Praxis mit vielen Tipps und Tricks. Alles in allem eine sehr empfehlenswerte Veranstaltung und für 2020 kann man nur sagen: unbedingt hingehen!

Folgende Vorträge habe ich besucht:

  • Microsoft Cloud Switzerland
    • Speaker: Primo Amrein
    • Slides: https://speakerdeck.com/azurezurich/gabc2019-microsoft-cloud-switzerland-by-primo-amrein
    • Es gibt inzwischen 54 Azure Regionen, viele Schweizer Unternehmen nutzen bereits Dienste auf Azure. In der Schweiz wird es zwei Regions geben: „Switzerland North“ (Zürich) und „Switzerland West“ (Genf). Viele Azure Services werden bereits zum Start zur Verfügung stehen. Danach soll recht schnell SAP for SAP (M-Series) angeboten werden. Innerhalb von 2019 sollen dann nach und nach alle anderen Services verfügbar gemacht werden, so auch Office 365. Wichtiges Argument: „Customer Core Data at Rest does not leave Switzerland.“ Die Schweizer Bankiervereinigung hat einen Wegweiser für sicheres Cloud Banking herausgegeben.
  • Terraform und Azure – How to GitOps
    • Speaker: Sandro Koechli und Jörn Stenkamp
    • Slides: https://speakerdeck.com/azurezurich/gabc2019-terraform-and-azure-how-to-gitops-by-sandro-kochli-and-jorn-stenkamp
    • Im Vortrag ging es um „Infrastructure as Code“.
    • Was wird als GitOps bezeichnet? Managing Infrastructure as Code with a single source of truth (Git).
    • Die Infrastruktur wird deklarativ beschrieben.
    • ollaboration zwischen Teams (Producer / Consumer) mit GitFlows.
    • Für Azure gibt es ARM Templates im JSON-Format oder aber Terraform von HashiCorp. Diese sind in der Basis-Version Open Source und lassen sich auch für andere Plattformen wie z.B. AWS oder Google-Cloud nutzen. Terraform kennt das lese-freundliche HCL-Format oder das JSON-Format. Damit lassen sich auch Policy as a Code und Templates umsetzen.
    • Die Azure Cloud Shell bietet nativen Terraform Support
  • Azure Stack @ Mobiliar
    • Speaker: Stefan Roth
    • Slides: https://speakerdeck.com/azurezurich/gabc2019-azure-stack-at-mobiliar-by-stefan-roth
    • Stefan Roth berichtet über einen PoC (Proof of Concept), die die Mobiliar mit Azure Stack gemacht hat. Azure Stack ist ein Produkt von Microsoft, welches es ermöglicht, Azure Services im eigenen Datacenter zu betreiben. Was ich nicht wusste, ist dass HUAWEI auch Hardware für Server und Rechenzentren produziert: Die Hardware für den PoC wurde von HUAWEI zur Verfügung gestellt.
    • Mit dem PoC konnten alle vorbereiteten Use Cases erfolgreich durchgeführt werden. Mit der Verfügbarkeit von Azure Switzerland North und Azure Switzerland West scheint es jedoch nicht mehr so interessant zu sein, Microsoft Azure Stack einzusetzen. Azure Stack hat keine „managed services“, d.h. es wird ein Vollzeit-Administrator (1 FTE) benötigt, wenn man Azure Stack betreiben möchte.
    • Nicht zu unterschätzen – auf Folie 31: „Azure Stack is an emotional thing“
Rack mit Hardware für Azure Stack
  • Azure DevOps CI/CD the right way
    • Speaker: Ryan Bartram
    • Slides: https://speakerdeck.com/azurezurich/cd-the-right-way-by-ryan-bartram
    • Ryan hat den CI/CD DevOps Prozess erklärt und mit Demos und Beispielen in Azure DevOps gezeigt und verständlich gemacht.
    • Die Einführung von DevOps ist auch ein „Change in Culture“, wie z.B.:
      • „Keep everything in Source Control“
      • „Smoke test your deployment“
      • Alle im Team sind für den Release Prozess verantwortlich
      • „Done means Released!“
      • „If anything fails, stop the line“
      • Stetige Verbesserung
Vorteile von Azure File Sync
Thomas Maurer in Aktion …

Standard Pfad für SQL Server 2017 Local DB nicht einstellbar

Im SQL Server Management Studio gibt es die Möglichkeit die Standard Pfade für neu erstellte Datenbanken anzupassen. Hierzu klickt man im Objekt-Explorer mit der rechten Maustaste auf den LocalDB-Server und dann auf Properties. Unter Database Settings sollten sich dann die Database default locations einstellen lassen. Leider funktioniert das nicht mit der LocalDB und es wird eine Fehlermeldung geworfen.

LocalDBDatabaseDefaultLocations

ErrorWhileChangingDefaultPath

Das Problem ist auch hier beschrieben: https://dba.stackexchange.com/questions/191393/localdb-v14-creates-wrong-path-for-mdf-files

Mit Powershell kann man den aktuelle eingestellten Pfad auslesen und anzeigen:

<# Listet alle LocalDB Instanzen auf #>
sqllocaldb i

<# Ermittelt den Standardpfad für eine Instanz #>
$instancename = 'MSSQLLocalDB'
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | out-null
(New-Object Microsoft.SqlServer.Management.Smo.Server("(localdb)\$instancename")).DefaultFile

<# Das Ergebnis sieht z.B. dann so aus: C:\Users\bernhard\ #>

Für das Einstellen des Standard Pfades habe ich (noch) keine Lösung gefunden. Um aber trotzdem die Files im gewünschten Verzeichnis anzulegen, gibt man den Pfad beim Anlegen der Datenbank einfach mit:

CREATE DATABASE [MeineDatenbank]
CONTAINMENT = NONE
ON PRIMARY 
( NAME = N'MeineDatenbank', FILENAME = N'D:\users\bernhard\MeineDatenbank.mdf' , SIZE = 8192KB , FILEGROWTH = 65536KB )
LOG ON 
( NAME = N'MeineDatenbank_log', FILENAME = N'D:\users\bernhard\MeineDatenbank_log.ldf' , SIZE = 8192KB , FILEGROWTH = 65536KB )
GO

 

Bericht vom Azure Data Lake Event

Am 2.3.2018 habe ich am Azure Data Lake Event, durchgeführt von Microsoft und Trivadis, teilgenommen. Die Referenten gaben einen Überblick über das Potential und die Möglichkeiten von Microsoft Azure Data Lake und unterlegten dies auch gleich mit live Code-Beispielen, die sie während der Veranstaltung zeigten.

Speaker waren:

  • Michael Rys, Principal Program Manager Big Data Team, Microsoft
  • Patrik Borosch, Technical Solution Professional Data Platform, Microsoft
  • Marco Amhof, Senior Consultant für Azure Data Lake Analytics und Busines Intelligence, Trivadis

Mit Hilfe des Azure Data Lakes können einerseits unterschiedlichste Daten gespeichert, andererseits aber auch analysiert und weiterverarbeitet werden. Microsoft hat eine neue Sprache zur Auswertung dieser Daten entwickelt: U-SQL. Diese Sprache ist eine Kombination aus T-SQL und C# und bietet vor allem Microsoft Entwicklern ein komfortables Werkzeug im Bereich von Big-Data-Analysen.

Azure Data Lake und diverse Möglichkeiten für Analytics

Erstaunlicherweise war die erste Frage von Michael Rys: In welcher Sprache sollen  die Vorträge gehalten werden (in Hochdeutsch, Schweizer-Deutsch oder Englisch)? … Michael Rys stammt nämlich aus der Schweiz und lebt schon seit über 20 Jahren in den USA und arbeitet bei Microsoft.

Michael Rys hat erklärt, dass man sich den Azure Data Lake (ADL) jedoch nicht als See vorstellen sollte, wo die Daten wahllos hineingekippt werden, sondern eher ähnlich einer Verzeichnisstruktur, wo es Unterordner und verschiedene Bereiche gibt. Dort werden die Daten möglichst im Original-Format und ohne zusätzliche Schema-Informationen gespeichert. D.h. auch wenn man seine Daten in einem Data Lake kopiert und aufbewahrt, müssen diese verwaltet und organisiert werden. Das wird einem durch einen Data Lake nicht abgenommen. Hierzu könnte z.B. das Tool Azure Data Catalog verwendet werden.

Various Big Data Solutions

Mit U-SQL lassen sich die Daten gemäss „Query where the data lives“ auswerten und zwar mit dem Ziel dass möglichst wenig Daten kopiert werden müssen und das Ganze möglichst performant ist.

Daten mit U-SQL und Azure Data Lake Analytics (ADLA) abfragen

 

Bei Azure Data Lake Analytics sind bereits 6 sogenannte kognitive Funktionen eingebaut:

  • Face API
  • Image Tagging
  • Emotion Analysis
  • OCR
  • Text Key Phrase Extraction
  • Text Sentiment Analysis

Aber auch Funktionalitäten wie z.B. das Durchsuchen von PDF-Dateien lassen sich relativ einfach realisieren, indem Open-Source .Net Code einfach eingebunden (z.B. von GitHub) und verwendet werden kann, wie Marco Amhof eindrücklich mit einem seiner vielen Code-Beispiele und Live Demos demonstriert hat:

  • ImageTagging (ein Feature aus den Cognitive Services) mit Visualisierung in PowerBI

    Demo: Image Tagging

     

  • Verarbeitung von 2 CSV Files und einer Abfrage (Federated Query) aus Azure SQL DWH mit dem Ergebnis, mit diesen Daten einen Data Mart nach Azure Data Lake zu schreiben, und diesen wiederum mit PowerBI zu visualisieren.(Der Data Mart lässt sich ebenfalls mit dem Polybase Feature in Azure SQL DWH abfragen. Alternativ kann dieser Data Mart von PowerBI extrahiert und nach Azure Analysis Services deployed werden.)
  • PDFParsing: Mit einem Open Source PDF Parser lassen sich beliebige PDF Files parsen. Diese wurden dann mit dem Keyword Extractor (Cognitive Services Framework) verarbeitet und die in PowerBI mit dem WordCloud Custom Visual visualisert


Patrik Borosch thematisierte unter anderem die Frage: Wird das traditionelle Data Warehouse überhaupt noch benötigt? Oder kann man alle Daten in einen Data Lake hochladen und dann direkt mit Hadoop, Spark, R oder Azure Data Lake Analytics auswerten? Die Antwort die er gegeben hat, ist ein klares JA: Das Data Warehouse wird noch benötigt, aber der grösste Nutzen für das Unternehmen entsteht dann, wenn das relationale Data Warehouse als Teil einer Big Data Lösung betrieben wird.

Denn immer noch müssen die Daten von OLAP-System, CRM, MDM (Master Data Management) etc. integriert, bereinigt, aggregiert und ausgewertet werden. Und genau diese Dinge kann ein Data Warehouse sehr gut. Wenn nun das Data Warehouse in die Cloud migriert wird (z.B. als Azure Data Warehouse oder auch als vollwertiger SQL-Server auf einer Azure-VM) hat man quasi das Beste aus zwei Welten und kann strukturierte und nicht strukturierte Daten miteinander verbinden und daraus neue Erkenntnisse erzielen. Patrik Borisch gab auch den Hinweis, dass sich derzeit eine neue Lösung im der Public Preview-Phase befindet: Azure SQL Database Managed Instance.

Azure Data Lake, Analytics, and Data Warehouse

Mein Fazit: Das war eine gelungene, halbtägige Veranstaltung mit hochkarätigen Speakern, die es verstanden haben, einerseits einen Überblick über Azure Data Lake zu geben, und andererseits mit praktischen Code-Beispielen die gezeigten Themen direkt demonstrieren konnten und auch teilweise in die Tiefe zu gehen. Während der Veranstaltung gab es immer wieder Fragen seitens der Zuhörer, die aus sehr verschiedenen Branchen kamen.

Alle Fragen konnten von den Speakern detailliert und zufriedenstellend erklärt werden. Und auch die Organisatoren Willfried Färber und Rosmarie Stutz haben einen tollen Job gemacht: Sie haben tolle Speaker zu einem sehr spannenden Thema hier in die Schweiz geholt. Cool!

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.

 

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.