<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>SQL Practice Blog - SQL Server, BizTalk und .NET Erfahrungen &#187; SQL Server</title>
	<atom:link href="http://sqlpractice.wordpress.com/category/sql-server/feed/" rel="self" type="application/rss+xml" />
	<link>http://sqlpractice.wordpress.com</link>
	<description></description>
	<lastBuildDate>Tue, 07 Aug 2012 12:18:09 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='sqlpractice.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/4be7b4ce331ae7e4871aa64292415f9e?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>SQL Practice Blog - SQL Server, BizTalk und .NET Erfahrungen &#187; SQL Server</title>
		<link>http://sqlpractice.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://sqlpractice.wordpress.com/osd.xml" title="SQL Practice Blog - SQL Server, BizTalk und .NET Erfahrungen" />
	<atom:link rel='hub' href='http://sqlpractice.wordpress.com/?pushpress=hub'/>
		<item>
		<title>SQL Server 2012: EOMONTH Funktion</title>
		<link>http://sqlpractice.wordpress.com/2012/08/07/sql-server-2012-eomonth-funktion/</link>
		<comments>http://sqlpractice.wordpress.com/2012/08/07/sql-server-2012-eomonth-funktion/#comments</comments>
		<pubDate>Tue, 07 Aug 2012 12:18:03 +0000</pubDate>
		<dc:creator>Robert Meyer</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[EOMONTH]]></category>
		<category><![CDATA[SQL Server 2012]]></category>

		<guid isPermaLink="false">https://sqlpractice.wordpress.com/?p=319</guid>
		<description><![CDATA[Mit dem SQL Server 2012 ist eine neue Datumsfunktion dazu gekommen. Mit EOMONTH ist es möglich sich den letzten Tag des Monats ausgeben zu lassen. Dies ist besonders interessant wenn man Wertebereiche innerhalb eines Monats oder über mehrere Monate Tag genau selektieren möchte. So wendet man EOMONTH an, um sich den letzten Tag des Monats [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlpractice.wordpress.com&#038;blog=10851762&#038;post=319&#038;subd=sqlpractice&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Mit dem SQL Server 2012 ist eine neue Datumsfunktion dazu gekommen. Mit EOMONTH ist es möglich sich den letzten Tag des Monats ausgeben zu lassen. Dies ist besonders interessant wenn man Wertebereiche innerhalb eines Monats oder über mehrere Monate Tag genau selektieren möchte.</p>
<p>So wendet man EOMONTH an, um sich den letzten Tag des Monats August im Jahr 2012 ausgegeben zu lassen:</p>
<p><img style="background-image:none;border-bottom:0;border-left:0;margin:0 auto;padding-left:0;padding-right:0;display:block;float:none;border-top:0;border-right:0;padding-top:0;" title="image" border="0" alt="image" src="http://sqlpractice.files.wordpress.com/2012/08/image.png?w=244&#038;h=181" width="244" height="181" /></p>
<p>Man kann jedoch auch Monat dazu addieren oder abziehen. Hierfür steht ein optionaler Operator zur Verfügung.</p>
<p><img style="background-image:none;border-bottom:0;border-left:0;margin:0 auto;padding-left:0;padding-right:0;display:block;float:none;border-top:0;border-right:0;padding-top:0;" title="image" border="0" alt="image" src="http://sqlpractice.files.wordpress.com/2012/08/image1.png?w=252&#038;h=286" width="252" height="286" /></p>
<p>Es ist nur eine kleiner Erweiterung, aber sie erleichtert doch auf angenehme Art die Arbeit mit TSQL.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sqlpractice.wordpress.com/319/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sqlpractice.wordpress.com/319/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlpractice.wordpress.com&#038;blog=10851762&#038;post=319&#038;subd=sqlpractice&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sqlpractice.wordpress.com/2012/08/07/sql-server-2012-eomonth-funktion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/dec1bce1d6af02ea2c14212e970b05e8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">roeb</media:title>
		</media:content>

		<media:content url="http://sqlpractice.files.wordpress.com/2012/08/image.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://sqlpractice.files.wordpress.com/2012/08/image1.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>Paging mit OFFSET und FETCH im SQL Server 2012</title>
		<link>http://sqlpractice.wordpress.com/2012/07/19/pagging-mit-offset-und-fetch-im-sql-server-2012/</link>
		<comments>http://sqlpractice.wordpress.com/2012/07/19/pagging-mit-offset-und-fetch-im-sql-server-2012/#comments</comments>
		<pubDate>Thu, 19 Jul 2012 06:25:45 +0000</pubDate>
		<dc:creator>Robert Meyer</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[FETCH]]></category>
		<category><![CDATA[OFFSET]]></category>
		<category><![CDATA[ORDER BY]]></category>
		<category><![CDATA[ROW_NUMBER]]></category>
		<category><![CDATA[SQL Server 2012]]></category>
		<category><![CDATA[TOP]]></category>

		<guid isPermaLink="false">https://sqlpractice.wordpress.com/?p=307</guid>
		<description><![CDATA[Lange hat es gedauert, doch nun beherrscht der SQL Server mit Version 2012 endlich das Paging. Unter Paging versteht man die Festlegung davon wie viele Datensätze pro Seite ausgeben werden sollen. Dies wird besonders bei diversen Webapplikationen benötigt um die Anzahl der geladenen Daten zu verringern. Würde die Suche auf einer Website ein Trefferergebnis von [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlpractice.wordpress.com&#038;blog=10851762&#038;post=307&#038;subd=sqlpractice&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Lange hat es gedauert, doch nun beherrscht der SQL Server mit Version 2012 endlich das Paging. Unter Paging versteht man die Festlegung davon wie viele Datensätze pro Seite ausgeben werden sollen. Dies wird besonders bei diversen Webapplikationen benötigt um die Anzahl der geladenen Daten zu verringern. Würde die Suche auf einer Website ein Trefferergebnis von 400 Datensätzen betragen, möchte der Nutzer sicherlich nicht alle 400 Datensätze mit einmal auf der Website sehen, sondern z.B. immer nur 20 Stück. Diese 20 Datensätze werden jetzt auf 20 Seiten aufgelistet. Damit der Traffic möglichst gering bleibt, werden auch immer nur die Datensätze der aktuellen Seite geladen. Das nennt man Paging.</p>
<p><strong>Möglichkeiten mit dem SQL Server 2012</strong></p>
<p>Mit dem SQL Server 2012 kommen unter anderen zwei neue Befehle welche in der ORDER BY Klausel genutzt werden können:</p>
<ul>
<li><strong>OFFSET<br />
</strong>Legt fest wie viele Datensätze übersprungen werden, bevor Datensätze zurückgegeben werden.</li>
<li><strong>FETCH<br />
</strong>Gibt an wie viele Datensätze nach der OFFSET Klausel angezeigt werden sollen</li>
</ul>
<p><strong>Beispiel</strong></p>
<p>In dem Beispiel werden Kundendaten selektiert, welche mit dem Nachnamen Meyer beginnen. Allerdings werden die ersten 40 Zeilen übersprungen und von da an 20 Zeilen selektiert.</p>
<p><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border:0;" title="image" src="http://sqlpractice.files.wordpress.com/2012/07/image4.png?w=223&#038;h=152" alt="image" width="223" height="152" border="0" /></p>
<p><strong>Varianten von OFFSET und FETCH</strong></p>
<p>Anstelle von NEXT kann man auch FIRST genutzt werden, es handelt sich hierbei nur um ein Synonym. Das gleich gilt für das Wort ROWS, hier kann auch ROW genutzt werden. Anstelle der direkten Anzahl der Datensätze bei OFFSET oder FETCH kann hier auch eine Variable zum Einsatz kommen. Dies könnte zum Beispiel so aussehen und wäre im zusammenhangen mit dynamisches Stored Procedures recht interessant.</p>
<p><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border:0;" title="image" src="http://sqlpractice.files.wordpress.com/2012/07/image5.png?w=244&#038;h=198" alt="image" width="244" height="198" border="0" /></p>
<p><strong>Expressions in OFFSET und FETCH</strong></p>
<p>Es ist ebenfalls möglich Expressions im Zusammenhang von OFFSET und FETCH zu nutzen. Hier ein Beispiel:</p>
<p><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border:0;" title="image" src="http://sqlpractice.files.wordpress.com/2012/07/image6.png?w=244&#038;h=179" alt="image" width="244" height="179" border="0" /></p>
<p>Zur Verfügung stehen die Erweiterungen OFFSET und FETCH bereits ab dem SQL Server 2012 Express.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sqlpractice.wordpress.com/307/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sqlpractice.wordpress.com/307/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlpractice.wordpress.com&#038;blog=10851762&#038;post=307&#038;subd=sqlpractice&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sqlpractice.wordpress.com/2012/07/19/pagging-mit-offset-und-fetch-im-sql-server-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/dec1bce1d6af02ea2c14212e970b05e8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">roeb</media:title>
		</media:content>

		<media:content url="http://sqlpractice.files.wordpress.com/2012/07/image4.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://sqlpractice.files.wordpress.com/2012/07/image5.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://sqlpractice.files.wordpress.com/2012/07/image6.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>Update auf gro&#223;e Datenmengen mit @@ROWCOUNT</title>
		<link>http://sqlpractice.wordpress.com/2012/07/11/update-auf-groe-datenmengen-mit-rowcount/</link>
		<comments>http://sqlpractice.wordpress.com/2012/07/11/update-auf-groe-datenmengen-mit-rowcount/#comments</comments>
		<pubDate>Wed, 11 Jul 2012 09:38:31 +0000</pubDate>
		<dc:creator>Robert Meyer</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[ROWCOUNT]]></category>
		<category><![CDATA[UPDATE]]></category>
		<category><![CDATA[WAITFOR DELAY]]></category>

		<guid isPermaLink="false">https://sqlpractice.wordpress.com/?p=295</guid>
		<description><![CDATA[Häufig steht man vor der Herausforderung in einer sehr großen Tabelle Datensätze zu aktualisieren. Hat diese z.B. wie in meinem Szenario über 10 Millionen Datensätze und einen Trigger der auf Update Commands reagiert, ist es nicht sehr sinnvoll mit einem mal mehr als 1000 Zeilen zu aktualisieren. Hierbei kann es zu ungewollten Table Locks kommen. [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlpractice.wordpress.com&#038;blog=10851762&#038;post=295&#038;subd=sqlpractice&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Häufig steht man vor der Herausforderung in einer sehr großen Tabelle Datensätze zu aktualisieren. Hat diese z.B. wie in meinem Szenario über 10 Millionen Datensätze und einen Trigger der auf Update Commands reagiert, ist es nicht sehr sinnvoll mit einem mal mehr als 1000 Zeilen zu aktualisieren. Hierbei kann es zu ungewollten Table Locks kommen. Noch problematischer wird es, wenn während des Zeitpunktes des Updates viele Abfragen auf dieser Tabelle ausgeführt werden.</p>
<p>Der erste Lösungsansatz bei diesem Problem ist ein eingeschränkter Update Befehl auf 1000 Zeilen. Diese kann man mit einem UPDATE TOP (1000) und ebenso mit dem Befehl SET ROWCOUNT 1000 erreichen (Siehe Beispiele).</p>
<p><img style="background-image:none;border-bottom:0;border-left:0;margin:0 5px;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="image" border="0" alt="image" src="http://sqlpractice.files.wordpress.com/2012/07/image2.png?w=377&#038;h=209" width="377" height="209" /></p>
<p>Möchte man nun etwa 100000 Zeilen aktualisieren empfiehlt es sich hierfür eine Schleife zu bauen. Außerdem sollte nach jedem Updatebefehl eine Wartezeit von 1-3 Sekunden eingefügt werden, damit andere Anfragen die Möglichkeit haben Sperren zu setzen. Dies erreicht man durch den Befehl WAITFOR DELAY. Hier ein Beispiel:</p>
<p><img style="background-image:none;border-bottom:0;border-left:0;margin:0 5px;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="image" border="0" alt="image" src="http://sqlpractice.files.wordpress.com/2012/07/image3.png?w=382&#038;h=214" width="382" height="214" /></p>
<p>Der gesamte Updatevorgang kann dadurch etwas länger dauern, man minimiert jedoch die Wahrscheinlichkeit von Locks über die ganze Tabelle und erlaubt z.B. Triggern optimaler zu arbeiten.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sqlpractice.wordpress.com/295/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sqlpractice.wordpress.com/295/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlpractice.wordpress.com&#038;blog=10851762&#038;post=295&#038;subd=sqlpractice&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sqlpractice.wordpress.com/2012/07/11/update-auf-groe-datenmengen-mit-rowcount/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/dec1bce1d6af02ea2c14212e970b05e8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">roeb</media:title>
		</media:content>

		<media:content url="http://sqlpractice.files.wordpress.com/2012/07/image2.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://sqlpractice.files.wordpress.com/2012/07/image3.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>Generieren von DML und DDL Skripten aus einer bestehenden Datenbank</title>
		<link>http://sqlpractice.wordpress.com/2010/11/02/generieren-von-dml-und-ddl-skripten-aus-einer-bestehenden-datenbank/</link>
		<comments>http://sqlpractice.wordpress.com/2010/11/02/generieren-von-dml-und-ddl-skripten-aus-einer-bestehenden-datenbank/#comments</comments>
		<pubDate>Tue, 02 Nov 2010 09:34:57 +0000</pubDate>
		<dc:creator>Robert Meyer</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[DDL]]></category>
		<category><![CDATA[DML]]></category>
		<category><![CDATA[Skriptegenerierung]]></category>
		<category><![CDATA[T-SQL]]></category>

		<guid isPermaLink="false">https://sqlpractice.wordpress.com/2010/11/02/generieren-von-dml-und-ddl-skripten-aus-einer-bestehenden-datenbank/</guid>
		<description><![CDATA[Häufig begegnet einem in einen Entwicklungsprozess von Software der Vorgang das man Datenbank mit Test- oder Initialdaten von einem SQL Server auf verschiedene andere SQL Server verteilen möchte. Hierfür stellt Microsoft verschiedene Wege zur Verfügung, welche aber alle in der einen oder anderen Weise an eine Technologie gekoppelt sind. Hier wären als Beispiel die SQL [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlpractice.wordpress.com&#038;blog=10851762&#038;post=239&#038;subd=sqlpractice&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Häufig begegnet einem in einen Entwicklungsprozess von Software der Vorgang das man Datenbank mit Test- oder Initialdaten von einem SQL Server auf verschiedene andere SQL Server verteilen möchte.</p>
<p>Hierfür stellt Microsoft verschiedene Wege zur Verfügung, welche aber alle in der einen oder anderen Weise an eine Technologie gekoppelt sind. Hier wären als Beispiel die SQL Server Integration Services (SSIS) aufzuzählen. Diese erzeugen ein SSIS Packet, welches wiederum durch das installierte Feature SSIS Daten auf verschiedene andere Datenbanken verteilen kann.    <br />Eine andere Möglichkeit besteht darin, T-SQL Skripte mit dem SQL Server Management Studio zu erzeugen. Diese Skripte beinhalten jedoch nur DDL Befehle, welche zum erzeugen von Datenbanken, Tabellen, Stored Procedures etc. benötigt werden. Jedoch werden keine DML Befehle inkludiert welche für das Erzeugen und Bearbeiten von Datensätzen zuständig sind.</p>
<p>Der einzige Weg, den Microsoft anbietet, führt über Visual Studio. Im Visual Studio öffnet man den Server-Explorer und verbindet sich mit der Datenbank in der sich die Tabelle befindet, von der ein T-SQL Skript erzeugt werden soll. Für die gewünschte Tabelle öffnet man das Kontextmenu und wählt den Eintrag <strong>Publish to provider </strong>aus.</p>
<p><img style="display:block;float:none;margin-left:auto;margin-right:auto;border-width:0;" title="image" border="0" alt="image" src="http://sqlpractice.files.wordpress.com/2010/11/image.png?w=302&#038;h=292" width="302" height="292" /> </p>
<p>Daraufhin startet ein Assistent der durch den Vorgang führt. Als ersten Schritt muss man hier nochmals die gewünscht Datenbank auswählen. Als nächsten Schritt entscheidet man sich für ein Ziel. Hier stehen die Möglichkeiten <strong>Script to file</strong> und <strong>Publish to shared provider</strong> zur Auswahl. Die erste Auswahlmöglichkeit dürfte klar sein, die zweit erlaubt das Ausführen des Skripts auf einem gehosteten SQL Server.</p>
<p><img style="display:block;float:none;margin-left:auto;margin-right:auto;border-width:0;" title="image" border="0" alt="image" src="http://sqlpractice.files.wordpress.com/2010/11/image1.png?w=348&#038;h=316" width="348" height="316" /> </p>
<p>Im nächsten Schritt des Assistenten können nun verschiedene Generierungseinstellungen für das T-SQL Skript definiert werden:</p>
<ul>
<li><strong>Drop existing objects in script        <br /></strong>Wird diese Eigenschaft auf True gesetzt, so wird als erstes in dem T-SQL Skript ein DROP Befehl für alle bestehenden Objekte definiert. </li>
<li><strong>Schema qualify        <br /></strong>Ist diese Eigenschaft auf True gesetzt, so werden die Objekt mit dem jeweiligen Schema erzeugt. Setzt man diese Eigenschaft jedoch auf False, werden nur die Objekte ohne Schemainformation erzeugt. Man sollte diese Eigenschaft auf True lassen. </li>
<li><strong>Script for target database        <br /></strong>Hier kann man die Version der Zieldatenbank definieren. Zur Auswahl stehen SQL Server 2000, 2005 und 2008. </li>
<li><strong>Types of data to publish        <br /></strong>Nicht immer möchte man die Daten und das Schema zusammenerstellen. Hier hat man die Auswahl für was das T-SQL Skript generiert werden soll. Für das Schema und die Daten (DDL + DML), nur das Schema (DDL) oder nur für die Daten (DML). </li>
</ul>
<p><img style="display:block;float:none;margin-left:auto;margin-right:auto;border-width:0;" title="image" border="0" alt="image" src="http://sqlpractice.files.wordpress.com/2010/11/image2.png?w=392&#038;h=356" width="392" height="356" />     <br />Als letzter Schritt zeigt der Assistent noch eine Zusammenfassung aller Einstellungen an. Danach wird das T-SQL Skript generiert.</p>
<p>Dies ist eine einfach Möglichkeit, mit der man schnell eine Datenbank von einem SQL Server auf einen anderen SQL Server übertragen kann wenn man keine direkte Verbindung zwischen den Servern aufbauen kann.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sqlpractice.wordpress.com/239/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sqlpractice.wordpress.com/239/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlpractice.wordpress.com&#038;blog=10851762&#038;post=239&#038;subd=sqlpractice&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sqlpractice.wordpress.com/2010/11/02/generieren-von-dml-und-ddl-skripten-aus-einer-bestehenden-datenbank/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/dec1bce1d6af02ea2c14212e970b05e8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">roeb</media:title>
		</media:content>

		<media:content url="http://sqlpractice.files.wordpress.com/2010/11/image.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://sqlpractice.files.wordpress.com/2010/11/image1.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://sqlpractice.files.wordpress.com/2010/11/image2.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>SQL Server 2008 R2: Unicode Compression</title>
		<link>http://sqlpractice.wordpress.com/2010/05/12/sql-server-2008-r2-unicode-compression/</link>
		<comments>http://sqlpractice.wordpress.com/2010/05/12/sql-server-2008-r2-unicode-compression/#comments</comments>
		<pubDate>Wed, 12 May 2010 09:04:00 +0000</pubDate>
		<dc:creator>Robert Meyer</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server 2008 R2 - Alles nur BI?]]></category>
		<category><![CDATA[compression]]></category>
		<category><![CDATA[ppedv]]></category>
		<category><![CDATA[SQL Server 2008 R2]]></category>
		<category><![CDATA[Unicodekomprimierung]]></category>

		<guid isPermaLink="false">https://sqlpractice.wordpress.com/2010/05/12/sql-server-2008-r2-unicode-compression/</guid>
		<description><![CDATA[Als Teil meiner Serien “SQL Server 2008 R2 – Alles nur BI?” möchte ich euch heute ein weiteres neues Features des SQL Servers 2008 R2 vorstellen. Die Unicodekomprimierung! Die Datenkomprimierung gibt es im SQL Server schon seit der Version 2005. Seit dem SQL Server 2008 R2 ist nun auch möglich im Zuge der Datenkomprimierung die [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlpractice.wordpress.com&#038;blog=10851762&#038;post=203&#038;subd=sqlpractice&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Als Teil meiner Serien “<em><strong>SQL Server 2008 R2 – Alles nur BI?</strong>”</em> möchte ich euch heute ein weiteres neues Features des SQL Servers 2008 R2 vorstellen. Die Unicodekomprimierung!</p>
<p>Die Datenkomprimierung gibt es im SQL Server schon seit der Version 2005. Seit dem SQL Server 2008 R2 ist nun auch möglich im Zuge der Datenkomprimierung die Komprimierung von Unicode durchzuführen. Aber was ist Unicode eigentlich? Betreibt man eine Website die unter mehreren Sprachen zur Verfügung bereit gestellt wird, unter anderem z.B. Japanisch, und die Inhalte aus dem SQL Server geladen werden, so bekommt man bei der Benutzung der Datentypen VARCHAR oder CHAR schnell Zeichenkonvertierungsprobleme.    <br />Deshalb gibt es die Datentyp NVARCHAR bzw. NCHAR welche auch mit anderen Zeichen umgehen können, als der eingestellten Sprache des SQL Server.     <br />Der Nachteil ist, das ein Zeichen in einer NVARCHAR oder NCHAR Spalte zwei Byte belegt. Speichert man das gleiche Zeichen in eine VARCHAR oder CHAR Spalte, so belegt ein Zeichen auch nur ein Byte.     <br />Aus diesem Grund wurde die Unicodekomprimierung eingeführt um beim speichern von Zeichen, welche weniger Platz benötigen auch weniger Platz belegt wird.</p>
<p>Praktisch bedeutet das: Speichert man in ein Unicodefeld mit Unicodekomprimierung Zeichen des westlichen Alphabets, so spart man bis zu 50% des Platzes. Bei z.B. japanischen Zeichen spart man hingegen nur bis zu 15% Speicherplatz.</p>
<p><img style="display:inline;border-width:0;margin:0 20px 0 0;" title="image" border="0" alt="image" align="left" src="http://sqlpractice.files.wordpress.com/2010/05/image2.png?w=252&#038;h=176" width="252" height="176" /> Wie aktiviert man die Unicodekomprimierung nun? Ich erwähnte bereits das die Unicodekomprimierung an die Datenkomprimierung des SQL Servers gekoppelt ist. Um die Datenkomprimierung für eine Tabelle zu aktivieren klickt man mit der rechten Maustaste auf die jeweilige Tabelle und wählt den Menupunkt <em>Storage </em>aus und dann den Eintrag <em>Manage Compressions …, </em>worauf sich ein Wizard öffnet mit dem man die Komprimierungsart auswählen kann. Hier stehen ROW oder PAGE zur Auswahl, wobei die Unicodekomprimierung für beide Komprimierungsarten zur Verfügung steht. Des Weiteren kann man in dem Wizard bereits erkennen wie groß die voraussichtliche Ersparnis des Festplattenspeichers sein wird. So eine Komprimierung geht aber immer mit einer höheren CPU Last einher, welche bei vielen Schreibvorgängen um die 10% liegen liegen kann. </p>
<p>Das ganze funktioniert natürlich auf per T-SQL Befehl der wie folgt lautet:</p>
<p><img style="display:inline;border-width:0;" title="image" border="0" alt="image" src="http://sqlpractice.files.wordpress.com/2010/05/image3.png?w=237&#038;h=95" width="237" height="95" /></p>
<p>Wie groß der Nutzen für jeden selbst ist, muss getestet werden. Bei sehr großen Tabellen / Datenbanken mit Inhalten in verschiedenen Sprachen, lohnt es sich jedenfalls darüber nachzudenken die Unicodekomprimierung einzuführen.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sqlpractice.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sqlpractice.wordpress.com/203/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlpractice.wordpress.com&#038;blog=10851762&#038;post=203&#038;subd=sqlpractice&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sqlpractice.wordpress.com/2010/05/12/sql-server-2008-r2-unicode-compression/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/dec1bce1d6af02ea2c14212e970b05e8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">roeb</media:title>
		</media:content>

		<media:content url="http://sqlpractice.files.wordpress.com/2010/05/image2.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://sqlpractice.files.wordpress.com/2010/05/image3.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>SQL Server 2008 R2: &#220;berblick &#252;ber die Editionen</title>
		<link>http://sqlpractice.wordpress.com/2010/04/30/sql-server-2008-r2-berblick-ber-die-editionen/</link>
		<comments>http://sqlpractice.wordpress.com/2010/04/30/sql-server-2008-r2-berblick-ber-die-editionen/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 08:53:54 +0000</pubDate>
		<dc:creator>Robert Meyer</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server 2008 R2 - Alles nur BI?]]></category>
		<category><![CDATA[Alles nur BI]]></category>
		<category><![CDATA[Editionen]]></category>
		<category><![CDATA[ppedv]]></category>
		<category><![CDATA[SQL Server 2008 R2]]></category>

		<guid isPermaLink="false">https://sqlpractice.wordpress.com/2010/04/30/sql-server-2008-r2-berblick-ber-die-editionen/</guid>
		<description><![CDATA[Den SQL Server 2008 R2 gibt es in neun verschiedenen Editionen. Diese Editionen kann man grob in drei Kategorien einteilen: Premium Editionen Core Editionen Spezielle Editionen Im folgenden werde ich die einzelnen SQL Server Editionen kurz erklären und die Einschränkungen aufzeigen. Premium Editionen Unter Premium Editionen findet man die größten und damit auch teuersten Lösungen [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlpractice.wordpress.com&#038;blog=10851762&#038;post=193&#038;subd=sqlpractice&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Den SQL Server 2008 R2 gibt es in neun verschiedenen Editionen. Diese Editionen kann man grob in drei Kategorien einteilen:</p>
<ul>
<li>Premium Editionen </li>
<li>Core Editionen </li>
<li>Spezielle Editionen </li>
</ul>
<p>Im folgenden werde ich die einzelnen SQL Server Editionen kurz erklären und die Einschränkungen aufzeigen.</p>
<p><strong>Premium Editionen</strong></p>
<p>Unter Premium Editionen findet man die größten und damit auch teuersten Lösungen des SQL Servers für große Datawarehouse Lösungen oder hochverfügbare und skalierbare Systeme.</p>
<ul>
<li><strong>Datacenter        <br /></strong>Mit dem SQL Server 2008 R2 kommt zum ersten mal eine Datacenter Edition. Mit ihr hat man die beste Lösung in den Bereichen Sicherheit und Skalierbarkeit. Die Datacenter Edition unterstützt die meisten Features der Enterprise Edition. Besonders an der Datacenter Edition ist die Unterstützung von bis zu 256 logischen Prozessoren, bis zu 25 Instanzen in einem Utility Control Point (UCP), uneingeschränkte Virtualisierung und keine Speichereinschränkungen. </li>
<li><strong>Parallel Data Warehouse        <br /></strong>Diese Edition ist ebenfalls neu mit dem SQL Server 2008 R2 gekommen. Bei der Parallel Data Warehouse Edition handelt es sich um eine, speziell für große Data Warehouses, konzipierte Edition. Sie unterstützt die Massively Parallel Processing (MPP) Technologie und eine Hub-and-Spoke Architektur. Sie kann bis zu 1 Petabyte Daten in einer einzigen Solution verwalten. </li>
</ul>
<p><strong>Core Editionen</strong></p>
<p>Unter den Core Editionen versteht man die klassische Standard und Enterprise Version. Im folgenden möchte ich nochmal auf die Unterschiede zwischen der Standard und der Enterprise Edition hinweisen.</p>
<ul>
<li><strong>Enterprise        <br /></strong>Die Enterprise Edition stellt eine umfassende und sichere Plattform für anwendungskritische Daten bereit. Hinzu kommen Features wie SSIS, SSRS und SSAS. Sie kann bis zu acht Prozessoren und 25 Instanzen in einem einzigen Utility Control Point (UCP) verwalten. Des Weiteren werden PowerPivot für SharePoint, Datenkomprimierung, die Master Data Services unterstützt. Es können bis zu zwei Terabyte Arbeits-speicher adressiert werden. Weiterhin werden die klassischen Features wie Backupkomprimierung, Transport Data Encryption (TDE) und gespiegelte Backups unterstützt. </li>
<li><strong>Standard        <br /></strong>Die Standard Edition ist eine BI und Datenverwaltungsplattform für kleine bis mittlere Unternehmen. Sie unterstützt nicht alle Features der Enterprise oder Datacenter Edition, beinhaltet jedoch die meist-genutzten Features. Neu in der Standard Edition ist nun die Backupkomprimierung, welche vorher nur in der Enterprise Edition zur Verfügung stand. Die Standard Edition unterstützt nur bis zu vier Prozessoren und 64 GB Arbeitsspeicher. Des Weiteren werden nur bis zu zwei Failover Cluster Nodes unterstützt. </li>
</ul>
<p><strong>Spezielle Editionen</strong></p>
<p>Mit dem SQL Server 2008 R2 kommen auch Versionen, welche auf ganze spezielle Anwendungsfälle bzw. Personen zugeschnitten sind.</p>
<ul>
<li><strong>Developer        <br /></strong>Die Developer Edition entspricht zu 100% der Datacenter Edition. Diese Edition darf jedoch nur für die Entwicklung, für Testzwecke und zu Demonstrationen eingesetzt werden. Möchte man die installierte Developer Edition inkl. der entwickelten Lösungen live setzen, so kann man problemlos zu einer Enterprise Edition upgraden. </li>
<li><strong>Web        <br /></strong>Die Web Edition hat vor allem einen preislichen Vorteil. Sie ist dafür ausgelegt primär auf Webservern installiert zu werden und damit bei Webapplikationen zum Einsatz zu kommen. Sie unterstützt wie die Standard Edition bis zu vier Prozessoren und 64 GB Arbeitsspeicher. Sie unterstützt jedoch nicht die Premiumfeatures der Standard Edition. </li>
<li><strong>Workgroup        <br /></strong>Die Workgroup Edition befindet sich sowohl preislich als auch funktional noch eine Stufe unter der Web Edition. Sie ist die erste Edition mit einer eingeschränkten Datenbankgröße von 512 Terabyte pro Datenbank, desweitere unterstützt sie nur zwei Prozessoren und bis zu 4GB Arbeitsspeicher. Die Workgroup Edition ist ohne Probleme upgradefähig auf die Standard oder Enterprise Edition. </li>
<li><strong>Express        <br /></strong>Die Express Edition ist die kostenlose Version des SQL Servers. Die unterstützt seit dem SQL Server 2008 R2 nun eine maximale Datenbankgröße von 10 GB. Jedoch kann sie weiterhin nur einen Gigabyte Arbeitsspeicher adressieren und einen Prozessor nutzen. Diese Edition wird z.B. mit Visual Studio ausgeliefert und unterstützt kein SSIS und SSAS. </li>
<li><strong>Compact        <br /></strong>Die Compact Edition ist für mobile Geräte ausgelegt oder für Desktopszenarien wo kein SQL Server installiert werden darf, sondern nur mit einer Datenbankdatei gearbeitet werden soll. Sie ist kostenlos wie die Express Edition, ist aber jedoch in ihrer Funktionalität stark eingeschränkt. </li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sqlpractice.wordpress.com/193/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sqlpractice.wordpress.com/193/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlpractice.wordpress.com&#038;blog=10851762&#038;post=193&#038;subd=sqlpractice&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sqlpractice.wordpress.com/2010/04/30/sql-server-2008-r2-berblick-ber-die-editionen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/dec1bce1d6af02ea2c14212e970b05e8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">roeb</media:title>
		</media:content>
	</item>
		<item>
		<title>SQL Server 2008 R2 &#8211; Alles nur BI?</title>
		<link>http://sqlpractice.wordpress.com/2010/04/29/sql-server-2008-r2-alles-nur-bi/</link>
		<comments>http://sqlpractice.wordpress.com/2010/04/29/sql-server-2008-r2-alles-nur-bi/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 13:38:09 +0000</pubDate>
		<dc:creator>Robert Meyer</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server 2008 R2 - Alles nur BI?]]></category>
		<category><![CDATA[Alles nur BI]]></category>
		<category><![CDATA[Blogserie]]></category>
		<category><![CDATA[ppedv]]></category>
		<category><![CDATA[SQL Server 2008 R2]]></category>

		<guid isPermaLink="false">https://sqlpractice.wordpress.com/2010/04/29/sql-server-2008-r2-alles-nur-bi/</guid>
		<description><![CDATA[Am 21.04.2010 war es soweit und die Launch-Veranstaltung des SQL Server 2008 R2 fand statt. Wenn ich mich mit anderen Leuten über den SQL Server 2008 R2 unterhalte, höre ich immer wieder Aussagen wie: “Der SQL Server 2008 R2 ist für mich uninteressant, der bringt ja eh nur Neuerungen im Bereich Business Intelligence.”. Das dies [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlpractice.wordpress.com&#038;blog=10851762&#038;post=191&#038;subd=sqlpractice&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><img style="display:inline;border-width:0;margin:10px 20px 0 0;" title="sql server 2008 r2" border="0" alt="sql server 2008 r2" align="left" src="http://sqlpractice.files.wordpress.com/2010/04/sqlserver2008r2.png?w=240&#038;h=81" width="240" height="81" /> Am 21.04.2010 war es soweit und die Launch-Veranstaltung des SQL Server 2008 R2 fand statt. Wenn ich mich mit anderen Leuten über den SQL Server 2008 R2 unterhalte, höre ich immer wieder Aussagen wie: “Der SQL Server 2008 R2 ist für mich uninteressant, der bringt ja eh nur Neuerungen im Bereich Business Intelligence.”. Das dies jedoch ganz und gar nicht der Fall ist, möchte ich in der folgenden Blogserie <strong><em>SQL Server 2008 R2 – Alles nur BI?</em></strong> zeigen. Dazu werden ich pro Woche einen Beitrag veröffentlichen wo neue Features des SQL Servers 2008 R2 vorgestellt werden, welche sich nicht auf Business Intelligence, sondern auf die Administration und Entwicklung mit dem SQL Server beziehen.</p>
<p>Dazu habe ich mir überlegt Beiträge zu den folgenden Themen zu bringen:</p>
<ul>
<li>Überblick über die neuen Editionen des SQL Servers 2008 R2 </li>
<li>SQL Server Utility und Utility Control Point (UCP) </li>
<li>Data Tier Applications </li>
<li>Integration von SQL Azure in das SSMS </li>
<li>Unicode Komprimierung </li>
<li>Möglichkeiten von Monitoring mit dem SQL Server 2008 R2 </li>
</ul>
<p>Anfangen werde ich diese Woche mit einem Überblick über alle SQL Server 2008 R2 Versionen. Wenn ihr noch weitere Wünsche habt, welche ich berücksichtigen soll, so meldet euch doch einfach bei mir <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Wenn ihr die neuen Features selbst ausprobieren möchtet, so könnt Ihr den SQL Server 2008 R2 auf der Seite von Microsoft bereits herunterladen (<a href="http://www.microsoft.com/sqlserver/2008/en/us/R2Downloads.aspx" target="_blank">Download</a>).</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sqlpractice.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sqlpractice.wordpress.com/191/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlpractice.wordpress.com&#038;blog=10851762&#038;post=191&#038;subd=sqlpractice&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sqlpractice.wordpress.com/2010/04/29/sql-server-2008-r2-alles-nur-bi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/dec1bce1d6af02ea2c14212e970b05e8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">roeb</media:title>
		</media:content>

		<media:content url="http://sqlpractice.files.wordpress.com/2010/04/sqlserver2008r2.png" medium="image">
			<media:title type="html">sql server 2008 r2</media:title>
		</media:content>
	</item>
		<item>
		<title>SQL Server: NEWID() versus NEWSEQUENTIALID()</title>
		<link>http://sqlpractice.wordpress.com/2010/04/08/sql-server-newid-versus-newsequentialid/</link>
		<comments>http://sqlpractice.wordpress.com/2010/04/08/sql-server-newid-versus-newsequentialid/#comments</comments>
		<pubDate>Thu, 08 Apr 2010 14:33:00 +0000</pubDate>
		<dc:creator>Robert Meyer</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Guid]]></category>
		<category><![CDATA[Index]]></category>
		<category><![CDATA[NEWID]]></category>
		<category><![CDATA[NEWSEQUENTIALID]]></category>
		<category><![CDATA[ppedv]]></category>
		<category><![CDATA[Primary Key]]></category>
		<category><![CDATA[Uniqueidentifier]]></category>

		<guid isPermaLink="false">http://sqlpractice.wordpress.com/2010/04/15/sql-server-newid-versus-newsequentialid/</guid>
		<description><![CDATA[Immer wieder habe ich die Diskussion unter Datenbankentwicklern und Softwareentwicklern ob ein eine Uniqueidentifier (GUID) als Primary Key geeignet ist. Prinzipiell gilt hier folgende Regel, benötigt man keine absolut eindeutigen und einzigartigen IDs so ist man mit dem Integer Datentyp in der Primary Key Spalte besser beraten. Der Unterschied beginnt schon damit, das sich ein [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlpractice.wordpress.com&#038;blog=10851762&#038;post=180&#038;subd=sqlpractice&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Immer wieder habe ich die Diskussion unter Datenbankentwicklern und Softwareentwicklern ob ein eine Uniqueidentifier (GUID) als Primary Key geeignet ist. Prinzipiell gilt hier folgende Regel, benötigt man keine absolut eindeutigen und einzigartigen IDs so ist man mit dem Integer Datentyp in der Primary Key Spalte besser beraten.</p>
<p>Der Unterschied beginnt schon damit, das sich ein Integerwert in der Regel fortlaufend erhöht und damit eine minimale Fragmentation des Index bewirkt. Ein weiterer Vorteil von dem Datentyp Integer ist dessen Größe. Ein Integer benötigt im Vergleich zum einer GUID sehr wenig Speicherplatz.</p>
<p>Manchmal jedoch reicht ein Integer nicht aus. Soll z.B. ein Datensatz über ein Unternehmen mit verschiedenen Standorten hinweg eindeutig sein, so wählt man meist eine GUID als ID. </p>
<p><strong>Was ist ein Uniqueidentifier (GUID)?</strong></p>
<p>GUID bedeutet Globally Unique Identifier und ist eine eindeutige Binärzahl. Für gewöhnlich generiert kein anderer Computer auf dieser Welt eine bereits erzeugte GUID ein zweites Mal. Eine neue GUID kann mit dem T-SQL Befehl NEWID() erstellt werden. Dazu wird die ID der Netzwerkkarte mit einer eindeutigen Zahl welche von der CPU Uhr stammt kombiniert. Das ergibt einen Globally Unique Identifier.</p>
<p><strong>Welche Möglichkeiten zu erzeugen einer GUID gibt es?</strong></p>
<p>Mit dem SQL Server ist es auf zwei Wegen möglich eine GUID zu erzeugen. Der erste und bereits angesprochene Weg, ist das erstellen einer GUID mit Hilfe der <em>NEWID() </em>Funktion. Ein anderer Weg ist das erstellen einer sequentiellen GUID, hierbei wird die erstellte GUID immer größer sein als die zuvor erstellte GUID. Dadurch entsteht eine fortlaufende GUID. Die Funktion dafür lautet <em>NEWSEQUENTIALID() </em>und kann jedoch nur in der DEFAULT Anweisung beim erstellen oder bearbeiten einer Tabelle angegeben werden.</p>
<p><strong>Praktisches Beispiel:</strong></p>
<p>Wir erstellen eine Tabelle mit zwei Spalten, einer ID Spalte als Primary Key welcher mit NEWID() bzw. NEWSEQUENTIALID() automatisch erstellt wird und einer <em>Value</em> Spalte, wo ein beliebiger Wert gespeichert wird. In diese Tabelle fügen wir nun mit Hilfe einer Schleife 2000 Datensätze ein. Danach werden wir uns folgende Indikatoren ansehen:</p>
<ul>
<li>Größe des Clustered Index</li>
<li>Fragmentierung des Clustered Index</li>
<li>Anzahl von Seiten die der Clustered Index benötigt</li>
</ul>
<p>Als erstes erstellen wir eine Tabelle, welche in der ID Spalte eine GUID mit der <em>NEWID()</em> Funktion erstellt.</p>
<p><img style="border-bottom:0;border-left:0;display:inline;margin-left:0;border-top:0;margin-right:0;border-right:0;" title="image" border="0" alt="image" src="http://sqlpractice.files.wordpress.com/2010/04/image.png?w=434&#038;h=71" width="434" height="71" />&#160;</p>
<p><img style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;margin:0 20px 0 0;" title="image" border="0" alt="image" align="left" src="http://sqlpractice.files.wordpress.com/2010/04/image1.png?w=252&#038;h=199" width="252" height="199" /> </p>
</p>
<p>Nun füllt eine <em>WHILE</em> Schleife die Tabelle mit 2000 Datensätzen. Die Funktion <em>REPLICATE</em> sorgt dafür das der Buchstabe A so oft repliziert wird wie der Wert Variable <em>@i</em> gesetzt ist.</p>
<p>Als nächsten Schritt müssen wir nun die drei Indikatoren auswerden. Um die Speicherplatzbelegung des Index auszulesen, bedienen wir uns der <em>sp_spaceused</em> Stored Procedure.</p>
<p>Um die Fragmentierung und die Anzahl der Seiten auslesen zu können, sprechen wir die<em> sys.dm_db_index_physical_stats</em> Funktion an. Als Übergabewert müssen wir hier die DatabaseID und die ObjectID angeben.</p>
<p><img style="border-bottom:0;border-left:0;display:inline;margin-left:0;border-top:0;margin-right:0;border-right:0;" title="image" border="0" alt="image" src="http://sqlpractice.files.wordpress.com/2010/04/image2.png?w=530&#038;h=85" width="530" height="85" />&#160;</p>
<p>Wir führen das Script aus und notieren uns die Werte. Danach löschen wir die Tabelle und erstellen die Tabelle erneut, nur diesmal nutzen wir anstatt NEWID() die NEWSEQUENTIALID() Funktion zum erstellen der GUID.</p>
<p>Das Ergebnis ist eindeutig. Die sequenzielle GUID belegt weniger Speicherplatz und benötigt damit auch weniger Seiten. Am deutlichsten ist der Unterschied wohl bei der Fragmentierung zu sehen, hierbei spielt die NEWSEQUENTIALID() ihre ganze Stärke aus. Da die neue GUID immer höher sein muss als die zuvor erzeugte GUID, entsteht in dem Index keine Unordnung und damit auch keine Fragmentierung. Ich habe zum Vergleich mal die Werte eine Primary Key Spalte mit dem Datentyp Integer dazugetan.</p>
<p><img style="border-bottom:0;border-left:0;display:block;float:none;margin-left:auto;border-top:0;margin-right:auto;border-right:0;" title="image" border="0" alt="image" src="http://sqlpractice.files.wordpress.com/2010/04/image3.png?w=534&#038;h=91" width="534" height="91" /> </p>
<p>Wenn man keine absolut eindeutige ID benötigt, so sollte man auf einen Integer zurückgreifen. Dieser lässt den Index nicht so schnell wachsen und fragmentiert diesen auch nur minimal.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sqlpractice.wordpress.com/180/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sqlpractice.wordpress.com/180/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlpractice.wordpress.com&#038;blog=10851762&#038;post=180&#038;subd=sqlpractice&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sqlpractice.wordpress.com/2010/04/08/sql-server-newid-versus-newsequentialid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/dec1bce1d6af02ea2c14212e970b05e8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">roeb</media:title>
		</media:content>

		<media:content url="http://sqlpractice.files.wordpress.com/2010/04/image.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://sqlpractice.files.wordpress.com/2010/04/image1.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://sqlpractice.files.wordpress.com/2010/04/image2.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://sqlpractice.files.wordpress.com/2010/04/image3.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>HowTo: Einsatz von Triggern</title>
		<link>http://sqlpractice.wordpress.com/2010/03/10/howto-einsatz-von-triggern/</link>
		<comments>http://sqlpractice.wordpress.com/2010/03/10/howto-einsatz-von-triggern/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 16:58:08 +0000</pubDate>
		<dc:creator>Robert Meyer</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[DDL. LOGON]]></category>
		<category><![CDATA[DML]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[ppedv]]></category>
		<category><![CDATA[Trigger]]></category>

		<guid isPermaLink="false">http://sqlpractice.wordpress.com/2010/03/10/howto-einsatz-von-triggern/</guid>
		<description><![CDATA[Hier ist wieder mal ein kleines HowTo. Diesmal wird es sich um Trigger und deren Einsatzmöglichkeiten handeln. Viele haben den Begriff Trigger schon einmal gehört, wissen jedoch nicht wie man sie einsetzt oder entwickelt, deshalb hab ich dieses HowTo geschrieben. Was sind Trigger? Ein Trigger ist ein Datenbankobjekt, welches z.B. auf einer Tabelle oder einer [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlpractice.wordpress.com&#038;blog=10851762&#038;post=167&#038;subd=sqlpractice&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Hier ist wieder mal ein kleines HowTo. Diesmal wird es sich um Trigger und deren Einsatzmöglichkeiten handeln. Viele haben den Begriff Trigger schon einmal gehört, wissen jedoch nicht wie man sie einsetzt   <br />oder entwickelt, deshalb hab ich dieses HowTo geschrieben.</p>
<p><strong>Was sind Trigger?</strong></p>
<p>Ein Trigger ist ein Datenbankobjekt, welches z.B. auf einer Tabelle oder einer Datenbank liegen kann und auf   <br />Ereignisse reagiert. Es wird nach drei Arten von Triggern unterschieden:</p>
<p>DML Trigger   <br />Kommen bei INSERT, UPDATE oder DELETE auf eine Tabelle oder Sicht zu Einsatz</p>
<p>DDL-Trigger   <br />Reagieren auf Data Definition Language Events (CREATE, ALTER, DROP)</p>
<p>LOGON-Trigger   <br />Reagieren auf LOGON Events</p>
<p>Ich möchte heute jedoch nur auf die DML Trigger eingehen und dessen Einsatz an einem ganze praktischen   <br />Beispiel einmal zeigen.</p>
<p><strong>Beispiel:</strong></p>
<p>Gegeben ist folgende Tabelle:</p>
<p><img style="border-bottom:0;border-left:0;display:block;float:none;margin-left:auto;border-top:0;margin-right:auto;border-right:0;" title="image" border="0" alt="image" src="http://sqlpractice.files.wordpress.com/2010/03/image.png?w=356&#038;h=180" width="356" height="180" /> </p>
<p>Es handelt sich zugegeben um eine sehr einfache Tabelle, jedoch lässt sich damit der Umgang mit Triggern sehr gut erläutern.   <br />In der Tabelle werden die Prüfdaten für ein Gerät gespeichert, d.h. wann ein Gerät zuletzt geprüft wurde und in    <br />welchen Intervall (Monate) es wieder geprüft werden muss.</p>
<p>Hierbei kommt der Trigger zum Einsatz, welcher berechnen soll wann die nächste Prüfung des Geräts ansteht. Dazu muss ich einen Trigger in der Tabelle DeviceCheck einsetzen welcher auf INSERT und UPDATE Anweisungen reagiert.</p>
<p><u>Syntax für einen DML-Trigger:</u></p>
<p><img style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;" title="image" border="0" alt="image" src="http://sqlpractice.files.wordpress.com/2010/03/image1.png?w=682&#038;h=168" width="682" height="168" /> </p>
<p>In unserem speziellen Fall würde der Trigger wie folgt aussehen:</p>
<p><a href="http://sqlpractice.files.wordpress.com/2010/03/image2.png"><img style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;" title="image" border="0" alt="image" src="http://sqlpractice.files.wordpress.com/2010/03/image_thumb.png?w=461&#038;h=261" width="461" height="261" /></a> </p>
<p>Dieser Trigger wird ausgeführt wenn ein INSERT oder UPDATE Befehl auf die Tabelle DeviceCheck abgefeuert wird. Dabei wird der Intervall mit dem letzten Prüfungsdatum addiert und der Datensatz in der Datenbank aktualisiert.</p>
<p><strong>Fazit</strong></p>
<p>Ein Trigger ist oftmals ein guter Helfer, jedoch sollte man sich im Klaren sein wohin man die Logik packen möchte. Kommt die Logik ausschließlich in die Businesslogik des Projekts (z.B. .NET Applikation) oder ist es erlaubt Logik auch in Datenbankobjekte auszulagern? Was meint ihr? Außerdem sollte man drauf achten das man in Triggern keinen komplizierten Berechnungen ausführt, da sowas die Performance der Datenbank erheblich beeinträchtigen kann.   </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sqlpractice.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sqlpractice.wordpress.com/167/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlpractice.wordpress.com&#038;blog=10851762&#038;post=167&#038;subd=sqlpractice&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sqlpractice.wordpress.com/2010/03/10/howto-einsatz-von-triggern/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/dec1bce1d6af02ea2c14212e970b05e8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">roeb</media:title>
		</media:content>

		<media:content url="http://sqlpractice.files.wordpress.com/2010/03/image.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://sqlpractice.files.wordpress.com/2010/03/image1.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://sqlpractice.files.wordpress.com/2010/03/image_thumb.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>SSIS: Dynamische Datenquellen</title>
		<link>http://sqlpractice.wordpress.com/2010/02/08/ssis-dynamische-datenquellen/</link>
		<comments>http://sqlpractice.wordpress.com/2010/02/08/ssis-dynamische-datenquellen/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 17:54:00 +0000</pubDate>
		<dc:creator>Robert Meyer</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Dynamische Datenquellen]]></category>
		<category><![CDATA[Integration Services]]></category>
		<category><![CDATA[ppedv]]></category>
		<category><![CDATA[SSIS]]></category>

		<guid isPermaLink="false">http://sqlpractice.wordpress.com/2010/02/08/ssis-dynamische-datenquellen/</guid>
		<description><![CDATA[Mit dem SQL Server 2005 wurden die Data Transformation Services (DTS) von den SQL Server Integration Services abgelöst. Bei den SQL Server Integration Services handelt es sich um eine komplette Neuentwicklung und nicht etwa um die Weiterentwicklung der Data Transformation Services. Das Prinzip der SQL Server Integration Services (SSIS) ist jedoch das gleiche: Extract – [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlpractice.wordpress.com&#038;blog=10851762&#038;post=138&#038;subd=sqlpractice&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Mit dem SQL Server 2005 wurden die Data Transformation Services (DTS) von den <strong>SQL Server Integration Services</strong> abgelöst. Bei den SQL Server Integration Services handelt es sich um eine komplette Neuentwicklung und nicht etwa um die Weiterentwicklung der Data Transformation Services. Das Prinzip der <strong>SQL Server Integration Services (SSIS)</strong> ist jedoch das gleiche: <strong>E</strong>xtract – <strong>T</strong>ransform – <strong>L</strong>oad</p>
<p><img style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;margin:10px 20px 0 0;" title="Netzwerktopologie_Stern" border="0" alt="Netzwerktopologie_Stern" align="left" src="http://sqlpractice.files.wordpress.com/2010/02/netzwerktopologie_stern.png?w=154&#038;h=150" width="154" height="150" /> In den <strong>SSIS</strong> ist es möglich diverse Datenquellen, aus denen ich meine Daten beziehen kann, anzugeben. Ich möchte in diesem Beispiel Bezug auf eine ADO.NET Datenquelle nehmen. Dieser hinterlege ich beim Erstellen einen statischen Connection Manager, welcher sich immer zu der selben Datenquelle verbindet. Jedoch sieht es in der Praxis so aus, das ich mich häufig in verteilten Systemen bewege, also die Daten aus verschiedenen Quellen mit der selben Struktur extrahiere. Hierfür wäre es jedoch ein unnötiger Overhead genauso viele Connection Manager anzulegen wie ich Datenquellen habe. Sowas kann im schlimmsten Fall in die Hunderte gehen. Die zentrale Frage die sich daraus ergibt lautet:</p>
<p><strong></strong></p>
<p><strong>Wie nutze ich dynamische Connection Strings bei ADO.NET Datenquellen?</strong></p>
<p><img style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;margin:0 0 0 20px;" title="controlflow" border="0" alt="controlflow" align="right" src="http://sqlpractice.files.wordpress.com/2010/02/controlflow.png?w=198&#038;h=154" width="198" height="154" /> Man benötigt als erstes eine Variable, in welche man den aktuellen Connection String hinterlegen kann. Dieser Connection String kann z.B. mit einem Script Task erzeugt bzw. aus einer beliebigen Quelle geladen werden. Hier ist es durchaus denkbar einen eigenen DataFlow Task zum Auslesen der Connection Strings zu erstellen. Auf der Abbildung rechts sieht man wie ein ControlFlow für dieses Szenario aussehen könnte. </p>
<p>Die Skriptkomponente muss dann den aktuellen Connection String in die Variable schreiben. Hier ist durchaus denkbar ein Array zu füllen, welches danach mit einer Schleife abgearbeitet werden kann. In der Schleife sollte sich dann der DataFlow Task befinden, welcher den ETL Prozess ausführt.</p>
<p><img style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;margin:0 20px 0 0;" title="expressions" border="0" alt="expressions" align="left" src="http://sqlpractice.files.wordpress.com/2010/02/expressions.png?w=307&#038;h=103" width="307" height="103" /> In dem DataFlow Task muss ich nun eine ADO.NET Datenquellen anlegen, für dich ich zuerst einen statischen Connection Manager erstellen muss. Nachdem das Erstellen der ADO.NET Datenquelle abgeschlossen ist, begebe ich mich in die Eigenschaften des erstellten Connection Managers. Dort kann man nun dem Punkt <em>Expressions </em>der Eigenschaft <em>ConnectionString</em> einen Ausdruck zuweisen. Hier wähle ich nun meine Variable aus, welche den Connection String beinhaltet. Siehe linke Abbildung. Sollte ich die erstellte Variable nicht auswählen können, so kann dies daran liegen, das die Variable für einen falschen Bereich deklariert worden ist.</p>
<p>Damit haben wir das Problem auch schon gelöst. Es gilt nur eins immer zu beachten: Die Struktur der Datenquellen muss identisch sein! </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sqlpractice.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sqlpractice.wordpress.com/138/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlpractice.wordpress.com&#038;blog=10851762&#038;post=138&#038;subd=sqlpractice&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sqlpractice.wordpress.com/2010/02/08/ssis-dynamische-datenquellen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/dec1bce1d6af02ea2c14212e970b05e8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">roeb</media:title>
		</media:content>

		<media:content url="http://sqlpractice.files.wordpress.com/2010/02/netzwerktopologie_stern.png" medium="image">
			<media:title type="html">Netzwerktopologie_Stern</media:title>
		</media:content>

		<media:content url="http://sqlpractice.files.wordpress.com/2010/02/controlflow.png" medium="image">
			<media:title type="html">controlflow</media:title>
		</media:content>

		<media:content url="http://sqlpractice.files.wordpress.com/2010/02/expressions.png" medium="image">
			<media:title type="html">expressions</media:title>
		</media:content>
	</item>
	</channel>
</rss>
