ROLLBACK TRANSACTION bei Tabellen-Variablen

Im Zusammenhang mit der Entwicklung einer Cache-Logik bin ich auf ein kleines Problem gestoßen, auf dass ich hier kurz hinweisen möchte. Nehmen wir an, wir haben folgendes SQL-Skript:

  1. Leeren eines Tabelle
  2. Befüllen der Tabelle mit frischen Daten
Packt man die beiden Befehle (DELETE und INSERT) nicht in eine Transaktion, kann es passieren, dass man bei einem INSERT-Fehler auf einmal mit einer leeren Tabelle da steht (was ja nicht immer so gewollt ist). 
Also habe ich folgende erweiterte Logik umgesetzt:
  1. Erstelle eine Transaktion
    1. Leeren eines Tabelle
    2. Befüllen der Tabelle mit frischen Daten
  2. wenn beides ohne Probleme lief, dann festschreiben (COMMIT)
  3. wenn es ein Problem gab, Rückgängig machen (ROLLBACK)
In meinen Tests mit einer Tabellen-Variable (@table) wollte das aber partout nicht funktionieren und ich bin wahnsinnig geworden (fast jedenfalls). Eine Änderung der Tabelle von Variable auf Temp (also statt @table auf #table) und schon klappt alles.
In einem Blog-Post wurde mein Verdacht dann auch bestätigt: es geht einfach nicht. Rollback wird bei Tabellen-Variablen nicht unterstützt…

Nachruf: Der mobile Mac-Arbeitsplatz

Die gestrige Apple Keynote hat einen Trend bestätigt: Apple sieht in den Kunden, die sowohl Mobilität wie auch Leistung wollen, keinen Markt für das Unternehmen aus Cupertino.

Ich selbst bin stolzer und zufriedener Besitzer eines MacBook Pro aus 2011. Das Gerät läuft, auch mit neuestem OS X. Nach einem Hardware Upgrade auf 2 TB Festplatte(n) und 16 GB RAM halte ich ein Arbeitsgerät in meinen Händen, mit welchem ich immer ein wenig Resourcen frei habe. Da kann man zu Entwicklungszwecken auch mal einen Windows 2012 Server virtualisieren und darin unter SQL Server und Visual Studio arbeiten.
Letztes Jahr sollte es dann ein neues Macbook Pro sein. Mit dem hochsuflösenden Retina-Display. Nach dem ersten Öffnen des Gerätes dann die Enttäuschung: verlöteter RAM und eine nicht-Standard Festplatte. Also zurück danit, bleib ich halt bei meinem 2011er Modell. Aber welchen Weg geht Apple da? Ich sehe immer größer werdenden Telefon, wachsende Tablets, kleiner werdende Notebooks und größer werdende iMacs.. An die Kunden, die gern einen mobilen Arbeitsplatz haben, der sowohl Leitung hat wie auch mit einer durchdachten Softwareplattform (OS X) punktet, dem Akkulaufzeit erstmal zweitrangig ist (mein MBP läuft ohne Netz bei normaler Nutzung „nur“ 3-4h), dem auch ein Gewicht von 1kg weniger Freudentränen als Sorgenfalten in’s Gesicht zaubert, an all diese wird leider nicht gedacht. Müssen/Sollen wir unsere Hoffnungen dann auf Windows 10 setzen? Oder wird Apple diesen Markt doch wieder-entdecken? Man wird es sehen, ich hoffe gespannt…

Security vs. Usability

Ein immer größer werdendes Thema in der heutigen IT-Welt, so zumindest sehe ich das, ist die immer schwerer werdenden Vereinbarkeit von Nutzeranforderungen hinsichtlich Bedienbarkeit und die Managementanforderungen hinsichtlich Security.

Ein schönes Zitat hierzu habe ich jetzt von Tim Cook gesehen:
„When a system is designed properly, then security and convenience can actually work in harmony.“ – Tim Cook at White House Security Summit February 2015
Komplett nachzuhöhren unter https://m.youtube.com/watch?v=QI6DvV2muDE.
Ich stimme ihm da zu, Security-Aspekte gehören schon beim Entwurf eines System berücksichtigt. Aber
  • Security-Anforderungen können sich ändern – wie berücksichtigt man also zukünftige Anforderungen?
  • nicht jedes System ist „State of the Art“ – wie verheiratet man ältere Systeme und aktuelle Anforderungen
  • komplexe Infrastruktur gehört gehändelt – wie macht man den Administratoren hier die Arbeit so einfach wie möglich ohne wieder die Security anzugreifen?

Gelöst: Datumsformat in SSRS-Parameter ändert sich nach Auswahl

Seit ein paar Wochen kämpfte ich mit einem kleinen, aber nervigen Problem. Die Ausgangslage:

  • Windows Server 2012 Englisch
  • Sharepoint Foundation 2013 Englisch
  • SQL Server 2012 mit Reporting Services (SSRS) im Sharepoint Modus (auch Englisch)
Das Problem: Ich habe mehrere Reports, die für deutschsprachige Nutzer gedacht sind, denen also das Datumsformat dd.mm.yyyy geläufiger ist als mm/dd/yyyy. Jetzt kam es in allen Reports immer dazu, dass man einen Datums-Parameter auswählt, mittels des kleinen Kalenders z.B. das Datum 01.03.2014 auswählte, mit dem Klick auf „Apply“ sich das Datumsformat, und somit auch der übermittelte Datums-Parameter in 01/03/2014, also den 3. Januar anstelle des 01. März veränderte.
Trotz aller Recherche, Einstellungen, etc.: es hilft nix. Glücklicherweise bin ich dann heute auf diesen Beitrag gestoßen: http://support.microsoft.com/kb/2764343/en-us. Dieser wiederum verwies auf ein Update-Pack, welches ich (dann im 3. Anlauf auch erfolgreich) runterladen konnte. Im Endeffekt, was mir dann geholfen hatte, war das aktuellste Update Pack für den SQL Server 2012 SP1: http://support2.microsoft.com/hotfix/KBHotfix.aspx?kbnum=2991533&kbln=de. Die aktuellste Übersicht findet man immer http://support.microsoft.com/kb/2772858/en-us.

MS-SQL-Script zur Darstellung aller Views in einer Datenbank

Neulich kam ich in die Verlegenheit ein Script bauen zu müssen, welches mir alle Views in einer MS-SQL-Datenbank zeigt, und für diese dann auch die jeweilige Anzahl an Zeile ausgibt.

set nocount on
declare @ObjectName varchar(100)
declare objectcursor cursor for
select
TABLE_NAME
from information_schema.tables
where 1=1
and table_type = ‚VIEW‘
and table_name not like ’syncob%‘
and table_name not like ‚vvZZ%‘
order by table_name desc
open objectcursor
fetch next from objectcursor into @ObjectName
while @@fetch_status = 0
begin
print @ObjectName + ‚ testing starting‘
declare @start datetime = getdate()
declare @sql nvarchar(300) = ’select count(*) from [‚ + @ObjectName + ‚] with (nolock)‘
–print ‚ ‚ + @sql
exec sp_executesql @sql
declare @End datetime = getdate()
declare @Duration int = datediff(ms, @Start, @End)
print @ObjectName + ‚ testing completed, Duration: ‚ + convert(varchar, @Duration) + ‚ ms‘
fetch next from objectcursor into @ObjectName
end
close objectcursor
deallocate objectcursor

Are you to busy to improve

Die permanente Verbesserung von eigenen Prozessen ist in meinem beruflichen Leben eben so ein immer wiederkehrender Bestandteil, wie die Beobachtung, dass Menschen in ihren „Hamster-Rädern“ gefangen sind. Eine sehr schöne Veranschaulichung dieser Situation habe ich hier gefunden: http://hakanforss.wordpress.com/2014/03/10/are-you-too-busy-to-improve/

Usability

Zum Thema Usability und Nutzererfahrungen gibt es ja tausend Meinungen. Ich bin immer der Überzeugung, dass intuitiv zu bedienende Systeme wichtig sind. Hierzu gehört auch die entsprechende Hervorhebung von System-Meldungen, Fortschrittsanzeigen, etc.

Beim Laden des VMWare vSphere Clients wundere ich mich jedes Mal auf’s Neue, wieso der Client nicht reagiert. Und jedes Mal übersehe ich den kleinen Lade-Hinweis. Na, wer kann ihn finden?

Neulich.. bei Sharepoint

Ich bin ja ein großer Fan der Microsoft SharePoint-Plattform. Endgültig überzeugt mit der WSS3/MOSS2007-Plattform habe ich mittlerweile eine SharePoint Foundation 2013 in der Mache.
Eines meiner Lieblings-Features in die Bereitstellung eines CMS, welches mir ermöglicht mittels WYSIWYG-Editor – unter MOSS2007 Sharepoint Designer 2007 – ASP.NET Inhalte in das Layout einzubinden… So z.B. ASP-Gridviews mittels eigener SQL-Data Source. In vielen Anwendungsfällen half mir das meinen Kunden einfache Datenabfragen aus Nicht-Sahrepoint-Datenbanken bereitzustellen – Zugriffssteuerung über die integrierte Sharepoint-Logik.
Unter Sharepoint Foundation musste ich jetzt aber feststellen, dass in der aktuellen Version des Sharepoint Designers die grafische Vorschau fehlt. Einfach weg. Unglaublich. Nach einer kurzen Recherche stellte sich dann raus, dass ich tatsächlich nicht zu blöd war es zu finden, sondern Microsoft diese Funktion tatsächlich wegrationalisiert hat. Siehe: http://praveenbattula.blogspot.de/2012/10/sharepoint-designer-2013-design-view.html.
Also hilft nur Eines: Schreiben im Quelltext. Sehr schade. War dieses einfache Erstellen doch für mich imemr eine einfache und komfortable Möglichkeit…