Wednesday 7 august 3 07 /08 /Aug. 18:19
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:
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;
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
von Olaf Helper - veröffentlicht in: T-SQL - Community: SQL Scripter
Kommentar hinzufügen - Kommentare (0)ansehen
Thursday 6 june 4 06 /06 /Juni 08:05

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.

von Olaf Helper - veröffentlicht in: MSSQL - Community: Microsoft SQL Server
Kommentar hinzufügen - Kommentare (0)ansehen
Tuesday 4 june 2 04 /06 /Juni 09:15

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.

von Olaf Helper - veröffentlicht in: MSSQL - Community: Microsoft SQL Server
Kommentar hinzufügen - Kommentare (0)ansehen
Thursday 8 november 4 08 /11 /Nov. 17:46

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

von Olaf Helper - veröffentlicht in: MSSQL - Community: Microsoft SQL Server
Kommentar hinzufügen - Kommentare (0)ansehen
Wednesday 20 june 3 20 /06 /Juni 16:26

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.

von Olaf Helper - veröffentlicht in: MSSQL - Community: Microsoft SQL Server
Kommentar hinzufügen - Kommentare (0)ansehen

Über diesen Blog

Kategorien

Kalender

November 2014
M T W T F S S
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
             
<< < > >>

Syndication (RSS)

  • RSS-Feed der Artikel

Suchen

Blog erstellen

Erstellen Sie einen Blog auf OverBlog - Kontakt - Nutzungsbedingungen - Werbung - Missbrauch melden - Impressum - Artikel mit den meisten Kommentaren