152kg
Goto Top

Debuggen in Transact SQL, SQL 2005

Hallo,

ich durfte gerade einen MS SQL Server 2005 üebrnehmen und habe davon relativ wenig Ahnung.
Im Momen versuche ich einen Maintenance Plan hinzubekommen.

Ich möchte im Moment eigenlich nur einen Dateinamen einlesen und diesen weiterverwenden.
Da das nicht klappt, möchte ich mir irgendwie ausgeben lassen, was eingelesen wurde.
Ich habe es mit Print versucht, was zumindest keine Fehler erzeugt. Nur wohin wird die Ausgabe geprintet? Im Output Fenster kommt nichts.
Also habe ich es versucht in eine Textdatei schreiben zu lassen. Geht auch nich wirklich.
Hier mal mein Code:


DECLARE @dateiname CHAR(350), @aufruf CHAR(350)
EXEC @dateiname = xp_cmdshell 'dir D:\Pfad\Zur\Datei\*.bak /b'
set @aufruf = @dateiname + ' >> D:\Pfad\Zur\Datei\hallo.txt'
print @dateiname
EXEC xp_cmdshell @aufruf

Gibt es bei diesem tollen zusammenklicksystem von SQL 2005 nicht irgendwo einen anständigen Debugger bei dem man Breakpunkte setzen, den Code Schrittweise ausführen und die Variableninhalte zur Laufzeit anschauen kann?

Content-ID: 160549

Url: https://administrator.de/contentid/160549

Ausgedruckt am: 19.11.2024 um 23:11 Uhr

MadMax
MadMax 11.02.2011 um 12:54:14 Uhr
Goto Top
Hallo 151kg,

einen anständigen Debugger im Bordwerkzeug vom SQL Server gibt es nicht. im Visual Studio kann man auch Prozeduren debuggen, aber so doll ist das nicht. Da bin ich mit print und select schneller.

Mit welchem Programm machst Du das Ganze denn? Im Management Studio bekommst Du im unteren Bereich die Ausgabe. Da gibt es möglicherweise auch mehrere Register, die print-Ausgabe ist im Register Meldungen.

Das Problem mit der Rückgabe von xp_cmdshell ist, daß da kein einzelner Text zurückgegeben wird, sondern eine Tabelle mit lauter Textzeilen. Das was in Deinem @dateiname landet, ist der Rückgabecode 0 oder 1, ob die Prozedur erfolgreich war oder nicht. Rückgaben von Prozeduren, die Tabellen zurückgeben bekommst Du folgendermaßen:
declare @tmp table (ausgabe varchar (max))
insert into @tmp exec xp_cmdshell 'dir D:\Pfad\Zur\Datei\*.bak /b'  
select * from @tmp

Gruß, Mad Max