Archiv

Archiv für März, 2009

TFS (SSRS/MDX) – Custom Reports Linkliste

27. März 2009 admin Keine Kommentare

Der TeamFoundationServer von Microsoft integriert sich sehr gut in Visual Studio. Diese Versions/Change/Bug…-Verwaltung ist in vielen Entwicklungsabteilungen im Einsatz.
Leider sind die beiliegenden Berichte in vielen Fällen nicht ausreichend, um die individuellen Anforderungen vieler Kunden zu berücksichtigen.

Eigene bzw. angepasste Berichte müssen also erstellt werden. Um die Einarbeitung in das Thema “Bericht mit TeamFoundationServer” zu erleichtern, möchte ich hier eine Linkliste zeigen die ich auf einer Website gefunden habe.

Hier wimmelt es geradezu von Links zu allen möglichen Facetten des TFS, SSRS (Reporting Services) sowie sogar MDX.

Mehr…

KategorienTechnik

Strings mit T-Sql verketten

25. März 2009 admin 1 Kommentar

Bei der Entwicklung von T-SQL-Scripten kommt es häufig vor dass Werte mittels String-Operationen (Zeichenkettenverarbeitung) verarbeitet werden müssen. Ob wir einen FullName aus Vorname und Nachname zusammenbauen müssen oder ein Stück dynamisches SQL erstellen, immer wieder muss der gute alte Stringverkettungsoperator (+) verwendet werden.

Ein interessantes Phänomen ist jetzt allerdings in einem laufenden Projekt aufgetreten. Hier werden sehr intensiv Stringverkettungen verwendet um zur Laufzeit dynamisches SQL zu generieren. Die resultierenden Texte sind zum Teil mehrere hundert Zeilen lang und überschreiten damit häufig die normale Maximallänge des varchar/nvarchar-Datentyps. (VarChar: 8000 Zeichen, NVarChar: 4000 Zeichen)

Die Lösung bietet SQL-Server ab der Version 2005 mit dem Datentyp (n)varchar(MAX). Hier können sehr große Inhalte hinterlegt werden (2^31-1 Bytes)!

Wenn es also ein SQL-Statement zu bauen gilt, muss dies einen Aufbau besitzen der dem Nachfolgenden entspricht:

 T-SQL |  copy code |? 
01
DECLARE @Datenbank NVARCHAR(100)
02
DECLARE @Command NVARCHAR(MAX) 
03
 
04
SET @Datenbank = N'AdventureWorks' 
05
 
06
SET @Command = N'Use ' + @Datenbank + ';
07
                 Select Feld1, Feld2 from MyTable; ' +
08
               N'--Weitere 10000 Zeichen'
09
 
10
-- Bitte die N-Präfixe bei den Strings unbedingt beachten!

Es muss darauf geachtet werden dass alle Teilstrings im Unicode-Format mit N’…’ angegeben werden. Wenn dies nicht eingehalten wird und einer der Teilstrings ist länger als 4000 Zeichen, ist das Ergebnis des gesamten Ausdrucks ein String mit 4000 Zeichen Länge! Das bedeutet im optimalen Fall einen Syntax-Error zur Laufzeit weil ein Statement irgendwo in der Mitte abgeschnitten wird. Es kann aber auch ohne Fehler ablaufen wenn die Trennung zufällig an einer Stelle auftritt die zwischen zwei Statements oder innerhalb eines Kommentars liegt!

Das oben beschriebene Verhalten ist unabhängig vom Variablentyp (nvarchar, varchar, max oder nicht …)!

have fun

KategorienSQL-Server 2005

SSIS – Stored Procedure als Datenquelle

18. März 2009 admin Keine Kommentare

Wenn man in SSIS eine Datenquelle verwendet so ist dies in den meisten Fällen eine Tabelle, View oder ein Select-Statement. Es kommt aber vor dass man ab und zu keine Datenquelle im klassischen Sinn vorfindet. Hier kann eine Stored Procedure Abhilfe schaffen die ein Result-Set zurückliefert, dass danach als Quelle für die weitere Verarbeitung dient.

Das Problem bei einer Stored Procedure besteht darin dass die Metadaten nur mit einem Workaround von SSIS automatisch eingelesen werden. Wie dies zu bewerkstelligen ist soll dieser Artikel kurz beschreiben.

Mehr…

KategorienSQL-Server 2005

SQL Server – Metadaten – Feldtypen feststellen

11. März 2009 admin Keine Kommentare

Ein kleines Script als Table-Values-Function dass für eine Tabelle oder ein Feld den Datentype zurückgibt:


 T-SQL |  copy code |? 
01
CREATE FUNCTION tvf_GetFieldTypes(@SchemaName sysname,@TabellenName sysname,@Feldname sysname)
02
RETURNS TABLE AS RETURN
03
SELECT   s.name AS SchemaName
04
        ,o.name AS TabellenName
05
        ,c.name AS FeldName
06
        ,t.name + 
07
            CASE t.name
08
                WHEN 'real'      THEN '(' + CAST(c.PRECISION AS VARCHAR(10)) + ')'
09
 
10
                WHEN 'varbinary' THEN '(' + CAST(c.max_length AS VARCHAR(10)) + ')'
11
                WHEN 'binary'    THEN '(' + CAST(c.max_length AS VARCHAR(10)) + ')'
12
                WHEN 'varchar'   THEN '(' + CAST(c.max_length AS VARCHAR(10)) + ')'
13
                WHEN 'char'      THEN '(' + CAST(c.max_length AS VARCHAR(10)) + ')'
14
                WHEN 'nvarchar'  THEN '(' + CAST(c.max_length/2 AS VARCHAR(10)) + ')'
15
                WHEN 'nchar'     THEN '(' + CAST(c.max_length/2 AS VARCHAR(10)) + ')'
16
 
17
                WHEN 'numeric'    THEN '(' + CAST(c.PRECISION AS VARCHAR(10)) + ',' + 
18
                                             CAST(c.scale AS VARCHAR(10)) + ')'
19
                WHEN 'decimal'    THEN '(' + CAST(c.PRECISION AS VARCHAR(10)) + ',' + 
20
                                             CAST(c.scale AS VARCHAR(10)) + ')'
21
                WHEN 'money'      THEN '(' + CAST(c.PRECISION AS VARCHAR(10)) + ',' + 
22
                                             CAST(c.scale AS VARCHAR(10)) + ')'
23
                WHEN 'smallmoney' THEN '(' + CAST(c.PRECISION AS VARCHAR(10)) + ',' + 
24
                                             CAST(c.scale AS VARCHAR(10)) + ')'
25
                ELSE ''
26
            END AS FeldTyp
27
        ,CASE c.is_nullable WHEN 0 THEN 'NOT NULL' ELSE 'NULL' END AS Nullable
28
 
29
FROM sys.objects o
30
    join sys.schemas s ON s.schema_id = o.schema_id
31
    join sys.columns c ON c.OBJECT_ID = o.OBJECT_ID
32
    join sys.types   t ON t.system_type_id = c.system_type_id
33
WHERE o.name like '%' + @TabellenName + '%'
34
  and s.name like '%' + @SchemaName + '%'
35
  and c.name like '%' + @Feldname + '%'
36
  and t.system_type_id = t.user_type_id
37
go
38
 
39
SELECT * FROM tvf_GetFieldTypes('Person','Co','')
40


und hier die Ausgabe:

Ergebnis
SchemaName TabellenName FeldName FeldTyp Nullable
Person Contact ContactID int NOT NULL
Person Contact NameStyle bit NOT NULL
Person Contact Title nvarchar(8) NULL
Person Contact FirstName nvarchar(50) NOT NULL
Person Contact MiddleName nvarchar(50) NULL
Person Contact LastName nvarchar(50) NOT NULL
Person Contact Suffix nvarchar(10) NULL
Person Contact EmailAddress nvarchar(50) NULL
Person Contact EmailPromotion int NOT NULL

 

have fun

KategorienSQL-Server 2005

SQL-Server 2005 – SSIS x64 Runtime

3. März 2009 admin Keine Kommentare

Ein Paket das mit Visual-Studio (bzw. BI-Studio) erstellt wird, kann in einer 64-Bit-Umgebung natürlich auch getestet werden. Davon bin ich bis jetzt zumindes ausgegangen …

Mehr…

KategorienSQL-Server 2005