T-SQL schreiben in eine txt-oder csv-Datei
Habe ich damit verbracht, den ganzen Tag durchforstet das Netz auf Antworten. Offenbar tsql nicht über seine eigene nette schreiben in Datei-Befehle. Hier ist mein dilemma
Ich habe eine Datei geladen, die ich erschaffe, wo eine einzelne Zeile erreichen 10K+ in der Länge. Auf SQL-Server varchar(MAX) Grenzwert 8000 (so glaube ich) also brach ich diese Zeilen in mehreren Variablen. Ich versuchte zu DRUCKEN, aber die Scheibe hat es ermöglicht 4000. Die Problemumgehung ist, zu drucken, diese gestrichelten Linien eine variable in einer Zeit, aber das kann es langweilig für die manuelle Arbeit, so entschied ich mich, zu schauen, schreiben in eine txt-Datei eine variable zu einer Zeit.
Schaute ich in BCP über xpcommandshell und es sah vielversprechend aus. Problem war, dass ich bekommen konnte, diese Zeile zu arbeiten, in der Eingabeaufforderung noch, dass genau die gleiche Linie, die nicht funktioniert TSQL-Abfrage:
declare @cmd varchar(8000)
select @cmd = 'bcp Client_DB "Select name from dbo.t_TagBuild_set" queryout "Desktop\LAMB\dummy.txt" -c -t, -T'
exec master..xp_cmdshell @cmd
bcp Client_DB "Select name from dbo.t_TagBuild_set" queryout "Desktop\LAMB\dummy.txt" -c -t, -T
funktioniert einwandfrei auf Eingabeaufforderung
trotz dieses leichten Fortschritt, mein manager wollte nicht diesen Weg gehen. Anstatt also entschied ich mich für die sp_OACreate und sp_OAMethod nach der Aktivierung von sp_configure über die Ausführung dieser Linie auf SQL:
sp_configure 'Ole Automation Procedures', 1
Einer der ersten Zeilen auf dieser route ist diese:
EXECUTE @hr = sp_OACreate 'Scripting.FileSystemObject' , @objFileSystem OUT
@hr gibt ein 0, so dass ist gut, aber @objFileSystem Erträge 16711422 und @hr wird schließlich -2146828218 was ich glaube ist von Berechtigungen.
ich wirklich ratlos bin auf der Suche nach etwas einfach zu tun, aber ich habe zunehmend schwer, mich auf mich selbst zu finden, etwas konkretes, nur um zu schreiben, um ein paar Variablen in einer Zeile vor dem hinzufügen der neuen Zeile, und wiederholen Sie den Vorgang.
Wer kann fachmännisch helfen Sie mir herauszufinden, BCP oder sp_OACreate dann wäre ich sehr dankbar Ursache der net da ist kaum hilft (und das ist nach ich verbrachte viel Zeit mit der Suche durch Microsofts eigene Website für eine Antwort)
varchar(max)
ist "unlimited". varchar(n)
ist beschränkt auf n <= 8000.mein manager wollte nicht diesen Weg gehen. was Ihre manager problem? Könnte SSIS, was Sie brauchen oder würde Ihre manager nix, wie auch? Auch, warum mit Herumspielen mit FSO? Wenn du gehst zu, dass Sie könnte genauso gut schreiben Sie eine CLR-Assembly
Technisch varchar(max) hat ein limit von 2gb
Ich fummelte mit etwas mehr und dachte über das Problem mit den Berechtigungen hinsichtlich sp_OACreate. Ich experimentierte und einen Ordner erstellt C:\TestOutput ich ging auf Sicherheit-Eigenschaften und gab jedem die volle Kontrolle und entfernt das nur-lese-Kontrollkästchen. Ich veränderte den Pfad der Datei zu gehen, statt, und es funktioniert jetzt. Jetzt dämmert mir die Erlaubnis war nicht ich, sondern der server selbst zu schreiben versucht, in einen Ordner, die Sie nicht haben, Berechtigungen zu.
InformationsquelleAutor John M | 2013-02-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Grund der BCP hat nicht funktioniert, ist, weil Sie ausgeführt wurden, es von xp_cmdshell mit einem vertrauenswürdigen Benutzer. xp_cmdshell ist nicht laufen unter dem Benutzer, der das Skript ausführt. Sie können entweder a) ändern Sie Ihr bcp-Befehl verwenden, um eine sql-Anmeldung/Passwort oder b) einen Auftrag erstellen, um es auszuführen (nicht xp_cmdshell), weil Sie Steuern können, welche Benutzer es ausgeführt wird, wie durch verwenden von " ausführen als und eine Berechtigung. Starten Sie dann den job in einem Skript mithilfe sp_start_job.
Ihr andere gute Möglichkeit ist, erstellen Sie ein SSIS-Paket und führen Sie es über die Befehlszeile (z.B. in einer bat-Datei) erneut oder führen Sie es durch einen job.
InformationsquelleAutor Kenneth Fisher
Erstellen Sie eine Ansicht Ihrer Abfrage und wählen Sie mit
sqlcmd
.-h-1
entfernt den headerSET NOCOUNT ON
entfernt die betroffenen Zeilen FußzeileInformationsquelleAutor user2601995
Schreiben Sie in eine Datei auf der T-SQL-Anweisungen mit dieser (er arbeitet in trigger):
--char(9) = \t
Ich habe versucht, und ich bin immer "Zugriff verweigert"
wahrscheinlich wird der Ordner muss den Zugriff von "mssqlserver" oder was auch immer die service-Benutzer ist.
InformationsquelleAutor Miguel Bessa