Overblog
Folge diesem Blog
Administration Create my blog
Blog von Olaf Helper

Neueste Posts

Microsoft SQL Server Developer Edition is now free

1. April 2016 , Geschrieben von Olaf Helper Veröffentlicht in #mssql

Das sind doch mal gute Nachrichten für alle SQL Server Entwickler:

Microsoft SQL Server Developer Edition is now free

Weiterlesen

SQL Server 2016 RC0 veröffentlicht

10. März 2016 , Geschrieben von Olaf Helper Veröffentlicht in #MSSQL

Gestern hat Microsoft den Release Candidate des SQL Server 2016 veröffentlicht, in der MSDN Subscription ist der Download bereits verfügbar.

SQL Server 2016 RC0 veröffentlicht

Weiterlesen

Announcing SQL Server on Linux

8. März 2016 , Geschrieben von Olaf Helper Veröffentlicht in #MSSQL

Im Bereich Data Platform tut sich momentan sehr viel, auf Azure wie auch On-Premise mit dem kommenden Microsoft SQL Server 2016.

Nun gibt es eine weitere Neuigkeit und zwar hat Scott Guthrie in seinem Blog verkündigt, das es ab Mitte 2017 der SQL Server auch für die Linux-Platform verfügbar sein soll: Announcing SQL Server on Linux

Ob ich mir das antue ...?

Inzwischen gibt es auch schon eine eigen Microsoft SQL Server on Linux Seite.

Weiterlesen

Datentypen eines Abfrageergebnisses ermitteln

7. August 2013 , Geschrieben von Olaf Helper Veröffentlicht in #T-SQL

Mit ein wenig Erfahrung und der Kenntnis der Datentypen des SQL Servers und insbesondere der Rangfolge der Datentypen kann man leicht ausmachen, welcher Datentyp bei einer Berechnung von einer Abfrage zurück geliefert wird.
War man sich nicht sicher, konnte man einfach mit einer SELECT ... INTO Anweisung aus dem Abfrageergebnis eine neue Tabelle erstellen lassen und sich dann in deren Definition die Typen ansehen.
Mit dem SQL Server 2012 wurde die neue dynamische Verwaltungsfunktion sys.dm_exec_describe_first_result_set eingeführt, mit dessen Hilfe man zu einer Abfrage die Datentypen selektieren kann.
Einfaches Beispiel mit ein paar Berechnungen sowie festen Werten und einer Funktion:
 
DECLARE @sql nvarchar(max);
-- Rückgabetypen einer Abfrage mit berechneten / festen Werten.   SET @sql =
N'SELECT 10 / 2 AS ResInteger' +
N'      ,10 / 2.0 AS ResNumeric1' +
N'      ,10.0 / 2.00000 AS ResNumeric2' +
N'      ,1.2345E6 AS ResFloat' +
N'      ,''Varchar'' AS ResVarchar' +
N'      ,N''NVarchar'' AS ResNVarchar' +
N'      ,CONVERT(varchar, '''') AS ResDefault' +
N'      ,1/1 AS ResNull' +
N'      ,ISNULL(1/1, 1/1) AS ResNotNull' +
N'      ,ISNULL(null, null) AS ResNullOrNotNull'

SELECT FRS.column_ordinal AS ordinal
      ,FRS.name
      ,FRS.is_nullable
      ,FRS.system_type_name AS systemtype
      ,FRS.max_length AS maxlength
      ,FRS.precision
      ,FRS.scale
      ,FRS.collation_name
FROM sys.dm_exec_describe_first_result_set(@sql, NULL, 0) AS FRS

 

 

Das Ergebnis:

 

DESCRIBE_SC1.jpg

 

Interessant finde ich hier, wann ein berechnetes Feld als Nullable betrachtet wird und wann nicht.

 

Über den 3ten Parameter @include_browse_information kann man steuern, wie "tief" detailliert das Ergebnis ausfallen soll.
Wenn man z.B. sys.dm_exec_describe_first_result_set auf eine Abfrage auf eine View anwendet und dabei den Parameter mit Wert 0 angibt, erhält man "nur" die Spaltenwerte für das finalle Abfrageergebnis, wie zuvor gesehen.
Übergibt man den Parameter mit Wert = 1, erhält man über die "source_..." Spalten noch die Information, aus welcher Basistabelle die Spalten eigentlich kommen.
Gutes Beispiel ist hier die View vSalesPerson, die Werte aus diversen Tabellen zuück liefert:
 

DECLARE @sql nvarchar(max);

-- Abfrage auf View mit den Daten zu den Quelltabellen.
SET @sql =
N'SELECT *
FROM [AdventureWorks2012].[Sales].[vSalesPerson]';

SELECT FRS.column_ordinal
      ,FRS.system_type_name
      ,FRS.source_schema
      ,FRS.source_table
      ,FRS.source_column
      ,FRS.name AS finalname
FROM sys.dm_exec_describe_first_result_set(@sql, NULL, 1) AS FRS;

Ergebnis:
DESCRIBE_SC2.jpg
Das funktioniert sogar bei Abfragen auf System Views

 

DECLARE @sql nvarchar(max);

-- Abfrage auf System Views.
SET @sql =
N'SELECT *
  
FROM sys.tables AS TBL
       INNER JOIN
       sys.columns AS COL
           ON TBL.object_id = COL.object_id';
SELECT FRS.column_ordinal
      ,FRS.system_type_name
      ,FRS.source_schema
      ,FRS.source_table
      ,FRS.source_column
      ,FRS.name AS finalname
      ,FRS.source_database
FROM sys.dm_exec_describe_first_result_set(@sql, NULL, 1) AS FRS;

 

hier sieht man sogar, aus welcher Systemtabelle die Daten kommen:

 

DESCRIBE_SC3.jpg

Mit Hilfe der DMF kann man ein Statement überprüfen lassen, ob es syntaktisch Korrekt und ob es im aktuellen Kontext auch fehlerfrei ausgeführt werden. Treten Fehler auf, erhält man die Fehlermeldung im Ergebnis mit der column_ordinal = 0; normalerweise beginnt der Wert mit 1.
Das ist zum Beispiel hilfreich, wenn man SQL Statements von einer Appliaktion dynamisch zusammen mit Benutzereingaben erstellt und vor der Ausführung kontrollieren will, ob Fehler auftreten werden, bevor sie es tun.
Beispiel:
 
DECLARE @sql nvarchar(max);

-- Abfrage parsen & kompilieren lassen,
-- um evtl. Fehlermeldungen zu erhalten
SET @sql =
N'SELECT UnbekanntesFeld from sys.objects';

SELECT FRS.error_number
     
,FRS.error_severity
      ,FRS.error_state
      ,FRS.error_message
      ,FRS.error_type
      ,FRS.error_type_desc
FROM sys.dm_exec_describe_first_result_set(@sql, NULL, 0) AS FRS
WHERE FRS.column_ordinal = 0;
DESCRIBE_SC4.jpg
Siehe auch MSDN:
sys.dm_exec_describe_first_result_set (Transact-SQL): http://msdn.microsoft.com/de-de/library/ff878258.aspx
sys.dm_exec_describe_first_result_set_for_object (Transact-SQL): http://msdn.microsoft.com/de-de/library/ff878236.aspx
sp_describe_first_result_set (Transact-SQL): http://msdn.microsoft.com/de-de/library/ff878602.aspx
Weiterlesen

SQL Server 2014: A Closer Look

6. Juni 2013 , Geschrieben von Olaf Helper Veröffentlicht in #MSSQL

Nach der Bekanntgabe der neuen SQL Server Version 2014 werden nun auch schon weitere Details veröffentlicht

SQL Server 2014: A Closer Look

In dem Blog Artikel findet man auch Links zu den TechNet Sessions auf MSDN Channel9.

Weiterlesen

Microsoft SQL Server 2014

4. Juni 2013 , Geschrieben von Olaf Helper Veröffentlicht in #MSSQL

Microsoft behält scheinbar seinen Release Zyklus von 2 Jahren für den SQL Server bei.
Auf der aktuell stattfindenden TechEd 2013 ist die neue Version SQL Server 2014 angekündigt, also wieder ein Major Release.

Bereits in der ersten CTP soll die neue In-Memory Database Engine "Hekaton" zum Testen enthalten sein, eine erstes Whitepaper dazu ist mit dem SQL Server 2014 Datasheet mit veröffentlich worden.

Weiterlesen

Projekt "Hekaton": In-Memory SQL Server Engine

8. November 2012 , Geschrieben von Olaf Helper Veröffentlicht in #MSSQL

Nach PowerPivot / xVelocity als IME = In-Memory Engine für Analysis Services gibt es nun die erste Ankündigung auf der PASS Summit 2012, das es analog auch eine IME für den relationalen Datenbank-Bereich geben soll; der Projektname hierzu lautet "Hekaton".

 

Microsoft verspricht sich ein Performanzsteigerung von ein ganzzahligen Faktor 50.

 

Der offizielle Blog Artikel von Microsoft ist hier zu finden: Accelerating Insights in the New World of Data

Weiterlesen

Microsoft® SQL Server Integration Services Balanced Data Distributor For Microsoft® SQL Server® 2012

20. Juni 2012 , Geschrieben von Olaf Helper Veröffentlicht in #MSSQL

Eigentlich wurden alle neuen Features vorab angekündigt und ich habe mich fleissig bemüht, informiert zu sein, nur das ist mir nun neu: BBD = Microsoft® SQL Server Integration Services Balanced Data Distributor For Microsoft® SQL Server® 2012

Bisher nur in Englisch verfügbar, aber das reicht ja auch.

Weiterlesen

AdventureWorks2012 now available for all on SQL Azure

9. April 2012 , Geschrieben von Olaf Helper Veröffentlicht in #MSSQL

Eigentlich eine sehr gute Idee, auf die Microsoft hätte auch schon mal kommen können: AdventureWorks2012 now available for all on SQL Azure.

Jamie Thomson hat auf eigene Kosten auf SQL Azure die aktuelle AdventureWorks 2012 Beispiel-Datenbank gehostet und der Community zur Verfügung gestellt, die Zugangsdaten sind in seinem Blog Artikel aufgeführt.

Die Zugang ist natürlich nur Read-Only, sonst könnte er wahrscheinlich im 5 Minuten Takt die Datenbank wieder zurücksichern.

Zugegeben, das schränkt die Möglichkeiten und Tes-Szenarien doch sehr ein, zumal die größeren Unterschiede zu einem On-Premise SQL Server im DML- und Management-Bereich liegen, aber immerhin kann man so gänzlich unverbindlich die ersten Erfahrungen mit SQL Azure und der Performanz machen.

Im Blog Artikel ist der Zugang über das SQL Azure Portal beschrieben. Wer lieber mit dem wohlbekannten SSMS arbeiten will, kann das auch, man sollte aber mindestens SSMS 2008R2 mit SP 1 oder gleich SSMS 2012 installiert haben.

Bei der Anmeldung muss man zwei Punkte beachten:

  • Man muss in den Verbindungsoptionen unbedingt den Datenbanknamen (hier AdventureWorks2012) angeben
  • Die Verbindung muss verschlüsselt werden. Vergisst man es, ist es auch nicht schlimm: Die Verbindung wird dann automatisch wieder getrennt und erneut mit erzwungener Verschlüsselung aufgebaut. Das bremst halt nur den Loginvorgang.

Im Anmelde-Dialog sieht es dann so aus:

 

SQLAzureAdvWorksLogin

Weiterlesen

Was ist in einem MS Excel PowerPivot Workbook enthalten?

4. April 2012 , Geschrieben von Olaf Helper Veröffentlicht in #OLAP

Nein, ich bin nicht neugierig, ich möchte es halt nur manchmal genau wissen und die Frage ist: Was ist in einem MS Excel PowerPivot Workbook enthalten?
Hintergrund der Frage ist auch, was passiert, wenn ich ein solches Workbook mit Excel auf einem Arbeitsplatz öffne, wo kein PowerPivot installiert ist? Kann ich sie evtl. gar nicht erst öffnen oder gehen beim Speichern die PowerPivot Daten verloren?
Die Workbooks von Excel 2010 haben das "OpenXML for Documents" Format, also XML Dateien. Öffnet man eine solche Datei in einem Texteditor, sieht es aber nicht nach XML aus, man sieht nur kryptische Zeichen. Grund ist einfach der, das die eigentliche XML Datei(en) im ZIP Verfahren komprimiert sind, um Platz zu sparen; die XML Tags und Datenkodierung blähen die Datenmenge doch sehr stark auf.
Und damit liegt der Trick, wie man Einblick ins Workbook erhält, auch schon auf der Hand: Man benennt die Dateiendung von .XLSX und .ZIP um und schon behandelt Windows es wie eine ZIP Datei (zur Sicherheit bitte mit einer Kopie arbeiten!).
Den ersten Unterschied zu einer Excel Datei ohne PowerPivot findet man gleich im Root Verzeichnis, es gibt einen zusätzlichen Ordner "customerXml". Dieser enthält einige XML Dateien, vermutlich Metadaten etc., nicht besonders spannend.
Im Standard-Ordner "xl" findet man einen weiteren neuen Ordner "customData", dieser beinhaltet in meinem Fall eine Datei "item1.data" mit der Größe von 11,7 MB; da das ganze Workbook 11,9 MB groß ist, liegt die Vermutung nahe, dass das die komprimierten Daten von PowerPivot sind. Ich hatte die AdventureWorks2008R2DW Beispieldatenbank ins PowerPivot übernommen, die Datenbank hat insgesamt 45,5 MB Nettodaten (+ 26,9 MB Indizes). Also liegt hier die Komprimierungsrate bei ungefähr Faktor 4; nicht ganz so hoch wie erwartet. Anhand des "Verhältnis" der ZIP Datei sieht man aber, das ZIP es auch nicht weiter komprimieren konnte.
 
PowerPivotWKB_ItemData.jpg
 
Direkt im Ordner "xl" findet man noch die "connections.xml", das ist zunächst nichts Ungewöhnliches. Hat man in Excel z.B. eine Sql Server Tabelle eingebunden, ist diese Connections Datei auch vorhanden.
Aber der Inhalt ist interessant:
 <?xml version="1.0" encoding="UTF-8" standalone="true"?> 
 <connections xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> 
  <connection refreshedVersion="4" type="5"  
  description="Diese Verbindung wird von Excel für die Kommunikation zwischen  
  der Arbeitsmappe und eingebetteten PowerPivot-Daten verwendet  
  und sollte nicht manuell bearbeitet oder gelöscht werden."  
  name="PowerPivot Data" keepAlive="1" id="1"> 
  <dbPr commandType="1" command="Model"  
  connection="Provider=MSOLAP.5;Persist Security Info=True; 
  Initial Catalog=Microsoft_SQLServer_AnalysisServices; 
   Data Source=$Embedded$;MDX Compatibility=1; 
  Safety Options=2;ConnectTo=11.0; 
   MDX Missing Member Mode=Error;Optimize Response=3; 
  Cell Error Mode=TextValue"/> 
  <olapPr rowDrillCount="1000" sendLocale="1"/> 
  <extLst> 
  <ext xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"  
   uri="{D79990A0-CA42-45e3-83F4-45C500A0EAA5}"> 
  <x14:connection embeddedDataId="Microsoft_SQLServer_AnalysisServices"  
  </ext> 
  </extLst> 
  </connection> 
</connections>  
 
Hier lässt sich schon die Architektur erahnen: PivotTable kommuniziert mit PowerPivot via OleDB "MSOLAP", wobei als Data Source $Embedded$ angegeben ist.
Das wirft für mich die nächste Frage auf: Kann man PowerPivot auch in eigenen Applikationen verwenden und auf gleiche Weise damit kommunizieren? Das aber später mal.
Um die ursprüngliche Frage zu beantworten, man kann problemlos ein PowerPivot Workbook mit Excel ohne PowerPivot öffnen und auch wieder speichern, ohne das Daten verloren gehen.
Weiterlesen
1 2 3 4 5 6 7 8 9 10 20 > >>