DataViewer auf Basis von TABLESAMPLE im ExPEditor

Beim Dokumentieren von Datenbanken mit dem ExPEditor habe ich gemerkt, dass ich ab und zu die Daten anschauen will, die in der Tabellen gespeichert sind. Nachdem einige Anwender von ExPEditor mir ähnliche Rückmeldung gegeben haben und ich zigmal zwischen zwei Tools gewechselt habe, war die Entscheidung gefallen:

Ein einfacher DataViewer ist ins ExPEditor einzubauen!

Die Version Build 16 implementiert ein neues Feature Table sample, das als ein weiterer Reiter umgesetzt ist. Der Reiter wird sichtbar, wenn eine Tabelle oder eine View im Object Explorer markiert ist. Table sample besteht aus zwei Bereichen Conditions und DataGrid:

  1. Im Bereich Conditions kann man Bedingungen für eine Abfrage der Stichproben festlegen und den Bereich zusammenklappen, wenn die Bedingungen nicht mehr geändert werden sollen.
    Man kann zwischen Klauseln TOP, TOP RANDOM, TABLESAMPLE, TABLESAMPLE RANDOM wechseln und entweder maximale Anzahl oder prozentualen Anteil der Stichproben auswählen.

    • TOP - zeigt begrenzte Anzahl von Datenzeilen an.
    • TOP RANDOM - bei jeder Ausführung der Abfrage wird begrenzte Anzahl von zufälligen Datenzeilen angezeigt.
    • TABLESAMPLE - zeigt Datenzeilen der zufällig ausgewählten Datenseiten an. Kann nur für eine Tabelle verwendet werden
    • TABLESAMPLE RANDOM - funktioniert ähnlich wie TABLESAMPLE nur mit dem Unterschied, dass die Zeilen in einer zufälligen Reihenfolge angezeigt werden. Wird für Views deaktiviert.
  2. DataGrid dient zur Darstellung von Stichproben und gibt die Möglichkeit, Datenzeilen nach einer Spalte zu sortieren. Dafür klickt man einfach auf dem Spaltenkopf.

Nachdem die Abfragebedingungen festgelegt sind, wird eine Abfrage mit dem Knopf Refresh ausgeführt. Nach einer Ausführung einer Abfrage wird eine Anzahl von angezeigten Zeilen und eine Gesamtanzahl von Zeilen der Tabelle (oder einer indizierten Sicht) unten im Statusbar angezeigt. Wenn Daten einer nicht indizierten Sicht im Reiter Table sample angezeigt werden, wird im Statusbar nur eine Anzahl der zurückgelieferten Zeilen angezeigt.

Viel Spaß beim Datenbankdokumentieren ;)

Table sample

Links:

Uniqueidentifier, GUID - The value could not be converted because of a potential loss of data

Wenn beim Import von Datensätzen mit GUIDs so ein Konvertierungsfehler auftritt, wird es höchstwahrscheinlich an den fehlenden geschweiften Klammern liegen, die normalerweise eine GUID umgeben sollen. Hier ist z.B. eine GUID, die in einem SSIS Paket ohne Weiteres importiert werden kann:

{AC4939C4-E35D-4DEE-B9D0-D6B888854F9C}

Wenn die geschweiften Klammern fehlen, sollte man versuchen den Export-Prozess zu überprüfen und so anzupassen, dass die GUIDs von benötigen geschweiften Klammern umgerahmt werden. Ist die Möglichkeit den Export anzupassen nicht gegeben, kann man immer noch den Import mit dem Task Derived Column (Transformation für abgeleitete Spalten) erweitern, um das Konvertierungsproblem zu lösen.

Hier ist ein Beispiel vom Transformationsausdruk, der im Feld Expression der Transformation für abgeleitete Spalten angegeben wird:

(DT_GUID)("{" + [GUID-Column-Name] + "}")

Eins muss man noch beachten, dass eine GUID vor der Konkatenation als ein String aus der Quelle ausgelesen werden muss. Dafür konfiguriert man die Eigenschaft DataType der GUID-Spalte im Connection Manager Editor als [DT_STR], sonst schlägt die Transformation fehl.

Links:

ExPEditor - Editor for SQL Server Extended Properties

Mit dem Artikel möchte ich auch was zum Thema „Datenbankdokumentation“ beitragen, und zwar ein Tool ExPEditor vorstellen.

Hinweis von 2011-12-18: Ich stelle den ExPEditor auf meiner Seite yury-iwtschenko.de bereit.

Zu einer Datenbankdokumentation gehören auf jeden Fall ein ER-Diagramm und eine technische und fachliche Beschreibung von Datenbankobjekten (Tabellen, Spalten, usw.). Die beiden Arten von der DB-Dokumentation kann man generieren lassen und es sind bereits ein oder anderes der kostenpflichtigen Tools, die es ermöglichen, bekannt.

SQL Server z.B. bietet Extended Properties zum Speichern der „fachlichen“ Beschreibung von Datenbankobjekten an. Es ist möglich, mehrere Extended Properties zu einem Datenbankobjekt hinzuzufügen. Die Extended Properties kann man direkt im SQL Server Management Studio editieren, es sind dafür leider mehrere Mouse-Klicks notwendig, bis man eine Eigenschaft editieren kann.

ExPEditor

Um die Arbeit mit Extended Properties zu vereinfachen und bequemer zu machen, habe ich die Entwicklung von dem ExPEditor gestartet und möchte heute eine Alpha-Version vorstellen.

Es sind folgende Features geplant

  • Navigation durch alle Datenbanken einer SQL Server Instanz
  • Bearbeitung von Extended Properties
  • Generieren von Beschreibung des Datenbankschemas im Word-Format
  • Generieren von DDL-Skripten zum Hinzufügen und Aktualiseren von Extended Properties
  • Anzeige von Definitionen der Datenbankobjekten

Implementierungsstand

Der ExPEditor ermöglicht ein bequemeren Zugriff auf die Extended Properties als das SQL Server Management Studio es anbietet

In der Alpha-Version kann man vorhandene Extended Properties und das Property Description, das automatisch durch ExPEditor zu jedem Objekt hinzugefügt wird und den Hauptteil der fachlichen Dokumentation darstellt, bearbeiten. In einer der nächsten Versionen wird es möglich sein, mehrere freibenannten EP’s zu einem Datenbankobjekt hinzuzufügen.

Das Generieren der Datenbankbeschreibung im Word-Format ist implementiert. Es gibt die Möglichkeit den Inhalt des Dokumentes nur für ausgewählte Datenbankobjekttypen generieren zu lassen.

Es kann ein DDL Skript generiert werden um alle Extended Properties einer Datenbank zu einer anderen Instanz zu übertragen.

Außerdem zeigt das Tool die DDL-Definition/T-SQL von Views, SP’s, Funktionen und Trigger an, was eine Datenbankentwicklung beschleunigen könnte und einem neuen Kollegen einen schnelleren Einstieg in die Entwicklung ermöglicht.

User Interface

Abbildung 1: Hauptfenster mit einem Objekt Explorer und einer tabellarischen Sicht, in der die Extended Properties des ausgewählen Objektes editiert werden können

Bild001

 

Abbildung 2: Ein zusätzliches Dialog zum Editieren von Extended Properties, ermöglicht bequemere Erfassen von mehrzeiligen Beschreibung

Bild002

 

Abbildung 3: Dialog zum Auswahl von Datenbankobjekttypen, für die die Datenbankdokumentation im Word-Format generiert wird. Man kann im Dialog den Pfad zum Speichern des generierten Dokuments auswählen. Wenn die Checkbox "Save and Open" markiert ist, wird das generierte Dokument im Word automatisch geöffnet.

Bild003

 

Abbildung 4: Definition einer gespeicherten Prozedur

Bild004

 

Technischen Voraussetzungen

Für Verwendung des ExPEditor's müssen Microsoft Word ab 2007 und .Net Framework 4.0 auf dem Rechner installiert sein.

Anmerkung

Der ExPEditor wird kostenfrei zur Verfügung gestellt und von mir weiterentwickelt. Ich freue mich auf jede Rückmeldung, die man an die E-Mail im About-Dialog des ExPEditor's senden kann.

Download

CountDistinct (T-SQL)

Möchte man Anzahl von eindeutigen Werten ermitteln, kann man das Argument DISTINCT der Funktion COUNT dazu verwenden.

Hier ist ein Beispiel

use tempdb
go

create table t1
(
	col1 int null
)
go

insert into t1 values
(1),(2),(3),(4),(5),
(1),(2),(3),(4),
(1),(2),(3),
(1),(2),
(1),
(null)
go

select
	count(distinct col1) as CountDistinct,
	count(all col1) as CountAll,
	count(*) as CountAsterisk
from t1
go

drop table t1
go

Hier ist das Resultset

CountDistinct CountAll    CountAsterisk
------------- ----------- -------------
5             15          16

Versionsnummer einer Datenbank

Hinweis von 2012-01-18:
Siehe auch ExPEditor - Editor for SQL Server Extended Properties.
ExPEditor - ist ein Tool, das die Verwaltung von Erweiterten Eigenschaften von Objekten einer SQL Server Datenbank erleichtert und eine Datenbankbeschreibung im Word-Format generiert.

Bevor man First-Level-Support anruft, sollte man zumindest die Versionsnummer des Beschwerdeobjekts kennen, um die Hilfe schnell und gezielt zu bekommen.

Bei Assemblies z.B. ist es üblich, Versionsnummer in Assembliesinfo zu verpacken, Oberflächen besitzen eigene Dialogboxen oder Seiten About, um die Versionsinfo dem Anwender zur Verfügung zu stellen.

Was ist mit Datenbanken, muss man eine Datenbank mit einer Versionsnummer versehen? Wird eine Datenbank nur von einer Anwendung verwendet, kann man in einigen Fällen die Datenbank und die Anwendung unter einer Versionsnummer zusammen ausliefern, dann wird das About-Anwendungsfenster ausreichend sein. Bei Enterprise-Lösungen wird eine Datenbank von „zich“ Web- und Windows-Services, Enterprise Service Bus, Web- und Desktop- Anwendungen verwendet, dazu kommen noch ETL-Prozesse, BI-Lösungen, die die Datenbank als Ziel oder Datenquelle anbinden. Mit anderen Wörtern wird eine Datenbank in einer Enterprise Lösung als einzelne Komponente betrachtet, deren Aktualisierung nicht zwingend eine Aktualisierung von anderen Komponenten der Gesamtlösung erfordert. Es ist auch umgekehrt gültig, beim Bugfixing einer Middleware-Anwendung wird die Datenbank nicht neu bereitgestellt, daher bleibt sie unter einer anderen Version bestehen.

Also ja, man sollte eine Datenbank mit einer Versionsnummer versehen. Die Frage ist „Wie?“.

Man könnte eine Tabelle Version erstellen, in der die ganze Versionsinfo abgespeichert wird. Es gibt aber für SQL Server Datenbanken (ab SQL Server 2005) auch eine andere Möglichkeit, die ich persönlich viel eleganter finde als eine Version-Tabelle. Die Möglichkeit ist, erweiterte Eigenschaften einer Datenbank und Datenbankobjekten einzusetzen. Im Beispiel 1 zeige ich, wie Datenbankeigenschaften um die Version und Bereitstellungsinfo erweitert werden können. Die erweiterten Eigenschaften einer Datenbank sind in SQL Server Management Studio über das Fenster Database Properties und die Seite Extended Properties zu erreichen (s. Abbildung 1).

Möchte man die erweiterten Eigenschaften von einer Anwendung aus abfragen, steht die Funktion fn_listextendedproperty zu Verfügung, ein Einsatz der Funktion ist auch in dem Beispiel 1 zu finden.

Beispiel 1: Erstellen von erweiterten Eigenschaften Version, Last deployment, Deployed by der aktuellen Datenbank

-- Stored Procedure
-- dbo.merge_extended_db_property
-- erstellt oder aktualisiert erweiterte Eigenschaften
-- der aktuellen Datenbank
-- @name - Name der Eigenschaft
-- @value - Wert der Eigenschaft
create proc dbo.merge_extended_db_property
	@name sysname,
	@value sql_variant
as
begin
	if not exists
	(
		select name
		from
			fn_listextendedproperty(@name,
					default, default, default,
					default, default, default)
	)
	begin
		exec sys.sp_addextendedproperty @name, @value
	end
	
	exec sys.sp_updateextendedproperty @name, @value
end
go
	
-- Erweiterte Eigenschaft 'Version'
-- Version der bereitgestellten Datenbank 
declare @name sysname = N'Version'
declare @value varchar(16) = '1.3.25'
exec dbo.merge_extended_db_property @name,@value
go

-- Erweiterte Eigenschaft 'Last deployment'
-- Das Datum der Bereitstellung der Datenbank
declare @name sysname = N'Last deployment'
declare @value varchar(128) = convert(varchar(128),getdate(),121)
exec dbo.merge_extended_db_property @name,@value
go

-- Erweiterte Eigenschaft 'Deployed by'
-- Anmeldename des Benutzers,
-- der die Datenbank bereitgestellt hat
declare @name sysname = N'Deployed by'
declare @value varchar(128) = system_user
exec dbo.merge_extended_db_property @name,@value
go
-- Löscht die Prozedur dbo.merge_extended_db_property
drop proc dbo.merge_extended_db_property
go

Abbildung 1: Anzeigen erweiterter Eigenschaften in SSMS

Database Extended Properties

Verwandte Links

1 2 3 4 »