<?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/"
	>

<channel>
	<title>heckelmann.info &#187; SQL Server</title>
	<atom:link href="http://www.heckelmann.info/category/sqlserver/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.heckelmann.info</link>
	<description>Der tägliche Wahnsinn</description>
	<lastBuildDate>Wed, 21 Apr 2010 14:05:22 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Collation von Tabellenspalten</title>
		<link>http://www.heckelmann.info/2009/09/collation-von-tabellenspalten/</link>
		<comments>http://www.heckelmann.info/2009/09/collation-von-tabellenspalten/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 13:44:57 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[T-SQL]]></category>
		<category><![CDATA[Collation]]></category>

		<guid isPermaLink="false">http://www.heckelmann.info/?p=132</guid>
		<description><![CDATA[Hi,
nach langer Abwesendheit, hier nur ein kurzes Script zum auflisten der Collation aller Tabellen-Spalten in einer Datenbank.

SELECT name, collation_name
FROM sys.columns
WHERE OBJECT_ID IN (SELECT OBJECT_ID
FROM sys.objects WHERE type = 'U')

Gruß,
Chris
]]></description>
			<content:encoded><![CDATA[<p>Hi,</p>
<p>nach langer Abwesendheit, hier nur ein kurzes Script zum auflisten der Collation aller Tabellen-Spalten in einer Datenbank.</p>
<pre name="code" class="SQL">
SELECT name, collation_name
FROM sys.columns
WHERE OBJECT_ID IN (SELECT OBJECT_ID
FROM sys.objects WHERE type = 'U')
</pre>
<p>Gruß,</p>
<p>Chris</p>
]]></content:encoded>
			<wfw:commentRss>http://www.heckelmann.info/2009/09/collation-von-tabellenspalten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Defraggel fraggel fraggel</title>
		<link>http://www.heckelmann.info/2009/06/defraggel-fraggel-fraggel/</link>
		<comments>http://www.heckelmann.info/2009/06/defraggel-fraggel-fraggel/#comments</comments>
		<pubDate>Thu, 18 Jun 2009 07:59:02 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Defrag]]></category>
		<category><![CDATA[Indizes]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.heckelmann.info/2009/06/18/defraggel-fraggel-fraggel/</guid>
		<description><![CDATA[Sodelle, heute ist es mal wieder soweit. Ich quäle mich durch unsere Datenbanken, und reorganisiere unsere Indizes. Aber lieber jetzt, als heute Nacht wenn ich Rufbereitschaft habe   und ich wegen eines Timeouts aus dem Bett geholt werde.
Zum glück verwenden wir von Idera den SQLDefrag Manager, das erspart mir das mühsame DBCC CHECKDB oder <a href="http://www.heckelmann.info/2009/06/defraggel-fraggel-fraggel/" class="more-link">Mehr &#62;</a>]]></description>
			<content:encoded><![CDATA[<p>Sodelle, heute ist es mal wieder soweit. Ich quäle mich durch unsere Datenbanken, und reorganisiere unsere Indizes. Aber lieber jetzt, als heute Nacht wenn ich Rufbereitschaft habe <img src='http://www.heckelmann.info/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  und ich wegen eines Timeouts aus dem Bett geholt werde.</p>
<p>Zum glück verwenden wir von Idera den <a href="http://www.idera.com/Products/SQL-Server/SQL-defrag-manager/">SQLDefrag Manager</a>, das erspart mir das mühsame DBCC CHECKDB oder DBCC CHECKTABLE.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.heckelmann.info/2009/06/defraggel-fraggel-fraggel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL Server Backup mit Idera SQLSafe Freeware Edition</title>
		<link>http://www.heckelmann.info/2009/06/sql-server-backup-mit-idera-sqlsafe-freeware-edition/</link>
		<comments>http://www.heckelmann.info/2009/06/sql-server-backup-mit-idera-sqlsafe-freeware-edition/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 08:03:15 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[T-SQL]]></category>
		<category><![CDATA[Backup]]></category>
		<category><![CDATA[Freeware]]></category>
		<category><![CDATA[Idera]]></category>
		<category><![CDATA[Restore]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQLSafe]]></category>

		<guid isPermaLink="false">http://www.heckelmann.info/?p=117</guid>
		<description><![CDATA[Heute will ich ein kostenloses Tool von Idera vorstellen. Leider ist das Backup von gerade sehr großen Datenbanken mit den Boardmitteln des SQL Servers oft eine sehr langwierige Angelegenheit (von den größenb der Backup File  mal ganz zu schweigen).
Da kommt der SQLSafe von Idera ins Spiel, von dem es auch eine Freeware Edition gibt <a href="http://www.heckelmann.info/2009/06/sql-server-backup-mit-idera-sqlsafe-freeware-edition/" class="more-link">Mehr &#62;</a>]]></description>
			<content:encoded><![CDATA[<p>Heute will ich ein kostenloses Tool von Idera vorstellen. Leider ist das Backup von gerade sehr großen Datenbanken mit den Boardmitteln des SQL Servers oft eine sehr langwierige Angelegenheit (von den größenb der Backup File  mal ganz zu schweigen).</p>
<p>Da kommt der <a href="http://www.idera.com/Products/Free-Tools/SQL-safe-Freeware-Edition/">SQLSafe </a>von Idera ins Spiel, von dem es auch eine<a href="http://www.idera.com/Products/Free-Tools/SQL-safe-Freeware-Edition/"> Freeware Edition</a> gibt (im vergleich zur Vollversion kann man diesen nicht per Policies bzw. der Console steuern). Wer aber nur eine Hand voll Datenbanken sichern möchte, sollte sich den Safe einmal genauer ansehen.</p>
<p>Die größten Vorteile:</p>
<ul>
<li>Komprimierung der Backups bis zu 95%</li>
<li>Schnellere Backups bis zu 50% Zeitersparnis im vergleich zu nativen Backups</li>
<li>Einfach zu Scripten</li>
</ul>
<p>Nachdem Ihr den SQLSafe installiert habt, stehen euch zwei Möglichkeiten zum sichern der Datenbanken zur Verfügung. Zum einen über die Kommandozeile (SQLSafecmd) oder über die Stored Procedures (xp_ss_backup oder xp_ss_restore). Beispiele zu der Verwenung der Scripte findet ihr in den mitgelieferten Hilfefiles.</p>
<p>Als kleines Beispiel zum Sichern der Datenbanken via Kommandozeile:</p>
<pre name="code" class="VB">
SQL safecmd backup northwind c:\backup\northwind.safe
SQL safecmd backup northwind c:\backup\nw_%timestamp%.safe
</pre>
<p>Beispiel zum Sichern der Datenbanken über T-SQL:</p>
<pre name="code" class="SQL">
DECLARE @Returncode int
EXEC @Returncode = [master].[dbo].[xp_ss_backup] @database = “Northwind”, @filename = "c:\backup\northwind.safe"
</pre>
<p><a href="http://www.idera.com/Products/Free-Tools/SQL-safe-Freeware-Edition/">Hier gehts zu Idera.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.heckelmann.info/2009/06/sql-server-backup-mit-idera-sqlsafe-freeware-edition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL Server Logins synchronisieren</title>
		<link>http://www.heckelmann.info/2009/06/sql-server-logins-synchronisieren/</link>
		<comments>http://www.heckelmann.info/2009/06/sql-server-logins-synchronisieren/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 08:06:15 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[T-SQL]]></category>
		<category><![CDATA[Logins]]></category>
		<category><![CDATA[Sync]]></category>

		<guid isPermaLink="false">http://www.heckelmann.info/?p=98</guid>
		<description><![CDATA[Nachdem ich schon seit ein paar Wochen nichts geschrieben habe, wird es mal wieder Zeit.
Vor einigen Monaten haben wir auf der Arbeit unsere altes Cluster neu aufgesetzt, und den SQL Server auf neuer Hardware installiert. Nachdem wir massig SQL Logins und Windows Gruppen berechtigt hatten, stellte sich die Frage, wie wir diese Logins wieder auf <a href="http://www.heckelmann.info/2009/06/sql-server-logins-synchronisieren/" class="more-link">Mehr &#62;</a>]]></description>
			<content:encoded><![CDATA[<p>Nachdem ich schon seit ein paar Wochen nichts geschrieben habe, wird es mal wieder Zeit.</p>
<p>Vor einigen Monaten haben wir auf der Arbeit unsere altes Cluster neu aufgesetzt, und den SQL Server auf neuer Hardware installiert. Nachdem wir massig SQL Logins und Windows Gruppen berechtigt hatten, stellte sich die Frage, wie wir diese Logins wieder auf den Datenbanken berechtigen können, ohne uns durch jede Datenbank zu klickern.</p>
<p>Um die Logins anzulegen hatte ich bereits ein Script zur Hand, jedoch mußten die neuen Logins (neue SID) mit den Datenbanken synchronisiert werden. Hier habe ich auf der SQLServerCenteral zwei kleine aber sehr gute Helferscripte gefunden, welche jedem DBA das Leben erleichtern.</p>
<p>Zunächst das erste Script, welches alle nicht synchronen Logins auf dem Server ausliest:</p>
<pre name="code" class="SQL">
DECLARE @Collation varchar(100)
DECLARE @SQL VARCHAR(2000)

CREATE TABLE ##TempSync
(
DB_NME Varchar(50),
DBUserName varchar(50),
SysLoginName varchar(50)
)

SELECT @Collation = CONVERT(SYSNAME,DatabasePropertyEx('master','Collation'))

SET @SQL = 'USE [?]
SELECT ''?'' DB_NME,
       A.name DBUserName,
       B.loginname SysLoginName
 FROM sysusers A
      JOIN master.dbo.syslogins B
      ON A.name Collate ' + @Collation + ' = B.Name
      JOIN master.dbo.sysdatabases C
      ON C.Name = ''?''
 WHERE issqluser = 1
       AND (A.sid IS NOT NULL
       AND A.sid <> 0x0)
       AND suser_sname(A.sid) IS NULL
       AND (C.status &#038; 32) =0 --loading
       AND (C.status &#038; 64) =0 --pre recovery
       AND (C.status &#038; 128) =0 --recovering
       AND (C.status &#038; 256) =0 --not recovered
       AND (C.status &#038; 512) =0 --offline
       AND (C.status &#038; 1024) =0 --read only
 ORDER BY A.name'

INSERT into ##TempSync
EXEC sp_msforeachdb @SQL

SELECT * FROM ##TempSync

DROP TABLE ##TempSync
</pre>
<p>Und nun das Script, was alle Logins wieder synchronisiert</p>
<pre name="code" class="SQL">
DECLARE @Collation VARCHAR (100)
DECLARE @SQL VARCHAR(2000)

SELECT @Collation =CONVERT(SYSNAME,DatabasePropertyEx('master','Collation'))

SET @SQL = 'USE [?]
DECLARE @DBUserName varchar(50)
DECLARE @SysLoginName varchar(50)
DECLARE SyncDBLogins CURSOR FOR
 SELECT A.name DBUserName,
        B.loginname SysLoginName
 FROM sysusers A
      JOIN master.dbo.syslogins B
      ON A.name Collate ' + @Collation + ' = B.Name
      JOIN master.dbo.sysdatabases C
      ON C.Name = ''?''
 WHERE issqluser = 1
       AND (A.sid IS NOT NULL
       AND A.sid <> 0x0)
       AND suser_sname(A.sid) IS NULL
       AND (C.status &#038; 32) =0 --Loading
       AND (C.status &#038; 64) =0 --pre recovery
       AND (C.status &#038; 128) =0 --recovering
       AND (C.status &#038; 256) =0 --not recovered
       AND (C.status &#038; 512) =0 --offline
       AND (C.status &#038; 1024) =0 --read only
 ORDER BY A.name

OPEN SyncDBLogins
FETCH NEXT FROM SyncDBLogins
 INTO @DBUserName, @SysLoginName

WHILE @@FETCH_STATUS = 0
 BEGIN
    EXEC sp_change_users_login ''update_one'', @DBUserName, @SysLoginName

    FETCH NEXT FROM SyncDBLogins
    INTO @DBUserName, @SysLoginName
 END
CLOSE SyncDBLogins
DEALLOCATE SyncDBLogins
'
EXEC sp_msforeachdb @SQL
</pre>
<p>Orginal Artikel: <a href="http://go.xinox.net/52sceq">http://go.xinox.net/52sceq</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.heckelmann.info/2009/06/sql-server-logins-synchronisieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Logfile shrink Part II</title>
		<link>http://www.heckelmann.info/2009/04/logfile-shrink-part-ii/</link>
		<comments>http://www.heckelmann.info/2009/04/logfile-shrink-part-ii/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 06:49:43 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[T-SQL]]></category>
		<category><![CDATA[Logfile]]></category>
		<category><![CDATA[Schrink]]></category>

		<guid isPermaLink="false">http://www.heckelmann.info/?p=95</guid>
		<description><![CDATA[Ich habe mein kleines Script zum shrinken der Logfiles aktualisiert. Der Logische Filename des Logfiles wird nun nicht hart angegeben ([DBNAME]_Log) sondern aus der sys.database_files gelesen.
Hier der aktualisierte Code:

USE [DBNAME]
GO
DECLARE @LDF NVARCHAR(255)
SELECT @LDF=[name] FROM sys.database_files WHERE [type_desc]='LOG'
DBCC SHRINKFILE(@LDF, 1)
BACKUP LOG [DBNAME] WITH TRUNCATE_ONLY
DBCC SHRINKFILE(@LDF, 1)

]]></description>
			<content:encoded><![CDATA[<p>Ich habe mein kleines Script zum shrinken der Logfiles aktualisiert. Der Logische Filename des Logfiles wird nun nicht hart angegeben ([DBNAME]_Log) sondern aus der sys.database_files gelesen.</p>
<p>Hier der aktualisierte Code:</p>
<pre name="code" class="SQL">
USE [DBNAME]
GO
DECLARE @LDF NVARCHAR(255)
SELECT @LDF=[name] FROM sys.database_files WHERE [type_desc]='LOG'
DBCC SHRINKFILE(@LDF, 1)
BACKUP LOG [DBNAME] WITH TRUNCATE_ONLY
DBCC SHRINKFILE(@LDF, 1)
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.heckelmann.info/2009/04/logfile-shrink-part-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Thank God it&#8217;s Friday!</title>
		<link>http://www.heckelmann.info/2009/01/thank-god-its-friday/</link>
		<comments>http://www.heckelmann.info/2009/01/thank-god-its-friday/#comments</comments>
		<pubDate>Fri, 16 Jan 2009 12:08:21 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[T-SQL]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.heckelmann.info/?p=83</guid>
		<description><![CDATA[Und wieder einmal haben wir es geschafft, endlich Freitag! Ich wünsche allen Lesern ein schönes Wochenende!
Wenn ich so auf die Woche zurückblicke, ist das beste das eintreffen unserer Idera Lizenzen gewesen. Jetzt habe ich eine Version des SQL Admin Toolsets, welches ich jedem DBA nur empfehlen kann, da es für den Preis von 495 USD <a href="http://www.heckelmann.info/2009/01/thank-god-its-friday/" class="more-link">Mehr &#62;</a>]]></description>
			<content:encoded><![CDATA[<p>Und wieder einmal haben wir es geschafft, endlich Freitag! Ich wünsche allen Lesern ein schönes Wochenende!</p>
<div id="attachment_84" class="wp-caption alignright" style="width: 310px"><img class="size-medium wp-image-84" title="SQLAdminToolset" src="http://www.heckelmann.info/wp-content/uploads/2009/01/sqladmintoolset-300x184.jpg" alt="SQLAdminToolset" width="300" height="184" /><p class="wp-caption-text">SQLAdminToolset</p></div>
<p>Wenn ich so auf die Woche zurückblicke, ist das beste das eintreffen unserer Idera Lizenzen gewesen. Jetzt habe ich eine Version des <a href="http://www.idera.com/products/sqladmintoolset/default.aspx" target="_blank">SQL Admin Toolsets</a>, welches ich jedem DBA nur empfehlen kann, da es für den Preis von 495 USD auch für kleinere Betriebe erschwinglich ist und eine menge Arbeit einen abnimmt.</p>
<p>Hier ein kleiner Auszug der Funktionen:</p>
<ul>
<li>Abfragen über mehrere SQL Server</li>
<li>Clonen und Kopieren von Logins</li>
<li>Datenbanken über Server kopieren</li>
<li>Server inventarisieren</li>
<li>Patchlevel auslesen</li>
<li>u.v.m&#8230;</li>
</ul>
<p>Ich will jetzt nicht weiter darauf eingehen, da der Feierabend langsam näher rückt, aber wer mag kann sich auf der <a href="http://www.idera.com/products/sqladmintoolset/default.aspx" target="_blank">Herstellerseite</a> eine 14-Tage Testversion herunterladen und selbst ausgiebig testen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.heckelmann.info/2009/01/thank-god-its-friday/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ausgabe von sp_help_job in Temptable speichern</title>
		<link>http://www.heckelmann.info/2009/01/ausgabe-von-sp_help_job-in-temptable-speichern/</link>
		<comments>http://www.heckelmann.info/2009/01/ausgabe-von-sp_help_job-in-temptable-speichern/#comments</comments>
		<pubDate>Thu, 15 Jan 2009 08:02:05 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[T-SQL]]></category>
		<category><![CDATA[Openrowset]]></category>
		<category><![CDATA[sp_help_job]]></category>

		<guid isPermaLink="false">http://www.heckelmann.info/?p=76</guid>
		<description><![CDATA[Ich brauchte eine Übersicht von SQL Agent Jobs (Name, LastRunDate, Current Execution Status und LastRunOutcome), doch da die Job Hisorty auf 10 Tage auf diesem Server begrenzt ist, fällt der Ansatz über die Tabellen msdb.dbo.sysjobs  und msdb.dbo.sysjobhistory aus (siehe Beispiel).

select distinct [name] as 'Job Name',
	case [enabled] when 1 then 'Enabled' else 'Disabled' end as <a href="http://www.heckelmann.info/2009/01/ausgabe-von-sp_help_job-in-temptable-speichern/" class="more-link">Mehr &#62;</a>]]></description>
			<content:encoded><![CDATA[<p>Ich brauchte eine Übersicht von SQL Agent Jobs (Name, LastRunDate, Current Execution Status und LastRunOutcome), doch da die Job Hisorty auf 10 Tage auf diesem Server begrenzt ist, fällt der Ansatz über die Tabellen msdb.dbo.sysjobs  und msdb.dbo.sysjobhistory aus (siehe Beispiel).</p>
<pre name="code" class="SQL">
select distinct [name] as 'Job Name',
	case [enabled] when 1 then 'Enabled' else 'Disabled' end as 'Enabled',
	cast (ltrim(str(run_date))+' '+stuff(stuff(right('000000'+ltrim(str(run_time)), 6) , 3, 0, ':'), 6, 0, ':') as datetime) as 'Last Run',
	step_id as Step,
	case [h].[run_status]
		when 0 then 'Failed' else 'Success'
		end as 'Status'
from msdb.dbo.sysjobs         j
left join msdb.dbo.sysjobschedules s
	on j.job_id = s.job_id
LEFT join msdb.dbo.sysjobhistory h
	on j.job_id = h.job_id
where step_id = 0
     and h.instance_id in (select max(sh.instance_id)
				from msdb.dbo.sysjobs sj
				join msdb.dbo.sysjobhistory sh
					on sj.job_id = sh.job_id
				where h.step_id = 0
				group by sj.[name])
</pre>
<p>Die einzigste Möglichkeit von allen Jobs diese Werte zu ermitteln, ist über die Prozedur sp_help_job. Leider ist es nicht möglich das Ergebnis in eine TempTable umzuleiten (siehe Beispiel)</p>
<pre name="code" class="SQL">
insert into #TempJobTable
   execute sp_help_job
</pre>
<p>Dies Endet dann meist in folgender Fehlermeldung:</p>
<blockquote><p>Server: Msg 8164, Level 16, State 1, Procedure sp_get_composite_job_info, Line 67<br />
An INSERT EXEC statement cannot be nested.</p></blockquote>
<p>Nun bleibt nur noch der Weg über OPENROWSET (siehe Beispiel) was wunderbar funktioniert.</p>
<pre name="code" class="SQL">
SELECT * INTO #JobInfo
FROM OPENROWSET('sqloledb', 'server=(local);trusted_connection=yes', 'set fmtonly off exec msdb.dbo.sp_help_job')
Select
[name],
cast(ltrim(str(last_run_date))+' '+stuff(stuff(right('000000'+ltrim(str(last_run_time)), 6) , 3, 0, ':'), 6, 0, ':') as NVARCHAR(255)) as 'Last Run',
CASE [current_execution_status]
	WHEN 1 THEN 'Executing'
	WHEN 2 THEN 'Waiting For Thread'
	WHEN 3 THEN 'Between Retries'
	WHEN 4 THEN 'Idle'
	WHEN 5 THEN 'Suspended'
	WHEN 7 THEN 'PerformingCompletion'
	ELSE 'Unknown'
	END AS Status
, CASE [last_run_outcome]
	WHEN 0 THEN 'Failed'
	WHEN 1 THEN 'Success'
	ELSE 'Unknown'
	END AS Result
from #JobInfo
ORDER BY [name]
DROP TABLE #JobInfo
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.heckelmann.info/2009/01/ausgabe-von-sp_help_job-in-temptable-speichern/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>T-SQL Script zum shrinken des Logfiles</title>
		<link>http://www.heckelmann.info/2009/01/t-sql-script-zum-shrinken-des-logfiles/</link>
		<comments>http://www.heckelmann.info/2009/01/t-sql-script-zum-shrinken-des-logfiles/#comments</comments>
		<pubDate>Wed, 07 Jan 2009 08:15:09 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[T-SQL]]></category>
		<category><![CDATA[Logfile]]></category>

		<guid isPermaLink="false">http://www.heckelmann.info/?p=65</guid>
		<description><![CDATA[Hier ein kleines T-SQL Script, welches ich verwende, um Logfiles zu shrinken.

USE [DBName]
GO
DBCC SHRINKFILE([DBName]_log, 1)
BACKUP LOG [DBName] WITH TRUNCATE_ONLY
DBCC SHRINKFILE([DBName]_log, 1)

Einfach [DBName] in den gewünschen Datenbanknamen ersetzen.
]]></description>
			<content:encoded><![CDATA[<p>Hier ein kleines T-SQL Script, welches ich verwende, um Logfiles zu shrinken.</p>
<pre name="code" class="SQL">
USE [DBName]
GO
DBCC SHRINKFILE([DBName]_log, 1)
BACKUP LOG [DBName] WITH TRUNCATE_ONLY
DBCC SHRINKFILE([DBName]_log, 1)
</pre>
<p>Einfach [DBName] in den gewünschen Datenbanknamen ersetzen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.heckelmann.info/2009/01/t-sql-script-zum-shrinken-des-logfiles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Alle Tabellen in einer Datenbank löschen</title>
		<link>http://www.heckelmann.info/2008/10/alle-tabellen-in-einer-datenbank-loschen/</link>
		<comments>http://www.heckelmann.info/2008/10/alle-tabellen-in-einer-datenbank-loschen/#comments</comments>
		<pubDate>Tue, 21 Oct 2008 08:30:24 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[T-SQL]]></category>
		<category><![CDATA[Truncate]]></category>

		<guid isPermaLink="false">http://www.heckelmann.info/?p=14</guid>
		<description><![CDATA[Bei großen Datenbanken hat man oft das Problem, daß man nicht alle Tabellen auf einfache Art un Weise löschen kann. Damit meine ich folgende Methode:
EXEC sp_MSForEachTable 'truncate TABLE ? '
Dies verhindern Contraints oder Trigger. Folgendes Script habe ich auf der SQLTeam.com Seite gefunden, welches einen diese mühselige Arbeit abnimmt.
/*

This batch t-sql deletes data from all <a href="http://www.heckelmann.info/2008/10/alle-tabellen-in-einer-datenbank-loschen/" class="more-link">Mehr &#62;</a>]]></description>
			<content:encoded><![CDATA[<p>Bei großen Datenbanken hat man oft das Problem, daß man nicht alle Tabellen auf einfache Art un Weise löschen kann. <span id="more-14"></span>Damit meine ich folgende Methode:</p>
<pre name="code" class="sql">EXEC sp_MSForEachTable 'truncate TABLE ? '</pre>
<p>Dies verhindern Contraints oder Trigger. Folgendes Script habe ich auf der SQLTeam.com Seite gefunden, welches einen diese mühselige Arbeit abnimmt.</p>
<pre name="code" class="sql">/*

This batch t-sql deletes data from all the tables in the database.

Here is what it does:
1) Disable all the constraints/triggers for all the tables
2) Delete the data for each child table &amp; stand-alone table
3) Delete the data for all the parent tables
4) Reseed the identities of all tables to its initial value.
5) Enable all the constraints/triggers for all the tables.

Note: This is a batch t-sql code which does not create any object in database.
If any error occurs, re-run the code again. It does not use TRUNCATE statement to delete
the data and instead it uses DELETE statement. Using DELETE statement can increase the
size of the log file and hence used the CHECKPOINT statement to clear the log file after
every DELETE statement.

Imp: You may want to skip CHECKIDENT statement for all tables and manually do it yourself. To skip the CHECKIDENT,
set the variable @skipident to "YES" (By default, its set to "NO")

Usage: replace #database_name# with the database name (that you wanted to truncate) and just execute the script in query analyzer.

*/

use [#database_name#]

Set NoCount ON

Declare @tableName varchar(200)
Declare @tableOwner varchar(100)
Declare @skipident varchar(3)
Declare @identInitValue int

set @tableName = ''
set @tableOwner = ''
set @skipident = 'NO'
set @identInitValue=1

/*
Step 1: Disable all constraints
*/

exec sp_MSforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
exec sp_MSforeachtable 'ALTER TABLE ? DISABLE TRIGGER ALL'

/*
Step 2: Delete the data for all child tables &amp; those which has no relations
*/

While exists
(
select T.table_name from INFORMATION_SCHEMA.TABLES T
left outer join INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
on T.table_name=TC.table_name where (TC.constraint_Type ='Foreign Key'
or TC.constraint_Type is NULL) and
T.table_name not in ('dtproperties','sysconstraints','syssegments')
and Table_type='BASE TABLE' and T.table_name &gt; @TableName
)

Begin
Select top 1 @tableOwner=T.table_schema,@tableName=T.table_name from INFORMATION_SCHEMA.TABLES T
left outer join INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
on T.table_name=TC.table_name where (TC.constraint_Type ='Foreign Key'
or TC.constraint_Type is NULL) and
T.table_name not in ('dtproperties','sysconstraints','syssegments')
and Table_type='BASE TABLE' and T.table_name &gt; @TableName
order by t.table_name

--Delete the table
Exec('DELETE FROM '+ @tableOwner + '.' + @tableName)

--Reset identity column
If @skipident = 'NO'
If exists(
SELECT * FROM information_schema.columns
WHERE COLUMNPROPERTY(OBJECT_ID(
QUOTENAME(table_schema)+'.'+QUOTENAME(@tableName)),
column_name,'IsIdentity')=1
)
begin
set @identInitValue=1
set @identInitValue=IDENT_SEED(@tableOwner + '.' + @tableName)
DBCC CHECKIDENT (@tableName, RESEED, @identInitValue)
end

checkpoint
End

/*
Step 3: Delete the data for all Parent tables
*/

set @TableName=''
set @tableOwner=''

While exists
(
select T.table_name from INFORMATION_SCHEMA.TABLES T
left outer join INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
on T.table_name=TC.table_name where TC.constraint_Type ='Primary Key'
and T.table_name &lt;&gt;'dtproperties'and Table_type='BASE TABLE'
and T.table_name &gt; @TableName
)

Begin
Select top 1 @tableOwner=T.table_schema,@tableName=T.table_name from INFORMATION_SCHEMA.TABLES T
left outer join INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
on T.table_name=TC.table_name where TC.constraint_Type ='Primary Key'
and T.table_name &lt;&gt;'dtproperties'and Table_type='BASE TABLE'
and T.table_name &gt; @TableName
order by t.table_name

--Delete the table
Exec('DELETE FROM '+ @tableOwner + '.' + @tableName)

--Reset identity column
If @skipident = 'NO'
If exists(
SELECT * FROM information_schema.columns
WHERE COLUMNPROPERTY(OBJECT_ID(
QUOTENAME(table_schema)+'.'+QUOTENAME(@tableName)),
column_name,'IsIdentity')=1
)
begin
set @identInitValue=1
set @identInitValue=IDENT_SEED(@tableOwner + '.' + @tableName)
DBCC CHECKIDENT (@tableName, RESEED, @identInitValue)
end

checkpoint

End

/*
Step 4: Enable all constraints
*/

exec sp_MSforeachtable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
exec sp_MSforeachtable 'ALTER TABLE ? ENABLE TRIGGER ALL'

Set NoCount Off</pre>
<p>Hier noch der <a href="http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=65341" target="_blank">Link zum Thread</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.heckelmann.info/2008/10/alle-tabellen-in-einer-datenbank-loschen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ich mag kein newid()</title>
		<link>http://www.heckelmann.info/2008/10/ich-mag-kein-newid/</link>
		<comments>http://www.heckelmann.info/2008/10/ich-mag-kein-newid/#comments</comments>
		<pubDate>Mon, 20 Oct 2008 13:17:18 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[newid()]]></category>

		<guid isPermaLink="false">http://www.heckelmann.info/?p=6</guid>
		<description><![CDATA[Wer kennt nicht das Problem mit dem Primary Key, Dataset und der NoNullAllowedException?
Ich habe mir die Finger wund gegoogelt um eine &#8220;einfache&#8221; Lösung des Problems zu finden, und bin über folgenden kleinen Codefetzen gestoßen, welchen man nur in seinem Dataset einpflegen muß (Rechtsklick auf das Dataset (XSD) im Designer und &#8220;View Code&#8221; auswählen.

   <a href="http://www.heckelmann.info/2008/10/ich-mag-kein-newid/" class="more-link">Mehr &#62;</a>]]></description>
			<content:encoded><![CDATA[<p>Wer kennt nicht das Problem mit dem Primary Key, Dataset und der NoNullAllowedException?<br />
Ich habe mir die Finger wund gegoogelt um eine &#8220;einfache&#8221; Lösung des Problems zu finden, und bin über folgenden kleinen Codefetzen gestoßen, welchen man nur in seinem Dataset einpflegen muß (Rechtsklick auf das Dataset (XSD) im Designer und &#8220;View Code&#8221; auswählen.</p>
<pre name="code" class="c-sharp">
        private bool CreateDefaultGuids = false;
        public void CtreateDefaultGuids()
        {
            if (CreateDefaultGuids) return;
            CreateDefaultGuids = true;
            foreach (DataTable dt in this.Tables)
            {
                if (dt.Columns[0] != null)
                {
                    dt.TableNewRow += new DataTableNewRowEventHandler(TableNewRowStudy);
                }
            }
        }
        private void TableNewRowStudy(object sender, DataTableNewRowEventArgs e)
        {
            if (e.Row[0] is DBNull)
                e.Row[0] = Guid.NewGuid();
        }
</pre>
<p>Jetzt muß dies im _Load Event deiner Form einmalig CtreateDefaultGuids() aufgerufen werden, und schon ist Schluß mit der NoNullAllowed Exception.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.heckelmann.info/2008/10/ich-mag-kein-newid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
