2012-03-28 4 views
0

Unten, wenn ich die gespeicherte Prozedur in Code oder in SQL Server Management Studio 2008 ausgeführt, sagte es Zeilen erfolgreich kopiert, aber ich bin nicht sicher, warum es nicht die Datei auf die Festplatte schreiben. Kann mir bitte jemand helfen, ich habe damit einige Tage gekämpft. Ich habe Kommando Shell und alles aktiviert. Das Seltsame ist, funktioniert es von der Kommandozeile, aber wenn ich von gespeicherte Prozedur ausführen, spielt es keine Datei auf Datenträger schreiben, kann einige einig mir helfenBcp gespeicherte Prozedur nicht Datei auf Festplatte schreiben

USE [ColorDb] 
GO 

ALTER PROCEDURE [dbo].[prc_WriteTableToTextDelimitedFile] 
(
    @FilePath VarChar(256) 

) 
AS 
BEGIN 

DECLARE @sql varchar(8000) 

SET @sql = 'bcp "SELECT * FROM ColorDb.dbo.ColorTable" queryout "'+ @FilePath +'" -c -t; -T -SXXXXXXXXXXXX' 

Print @sql 

exec master..xp_cmdshell @sql 

END 

RETURN 

Antwort

1

Ich würde den Inhalt des @sql ausdrucken, und @Dateipfad.

Ich habe gerade etwas Code über das MS SQL Server Manager Debugger-Fenster ausgeführt, Sie könnten durch den Code gehen. Ich habe bemerkt, dass Ihre Anführungszeichen nicht übereinstimmen, und ich sehe nicht, wo Sie @FilePath initialisieren. Wenn Sie Ihr letztes Segment betrachten, sieht es so aus, als hätte es ein unübertroffenes Doppelzitat.

Ich habe keine doppelten Anführungszeichen verwendet, ich lief von einer Abfrage im Abfrage-Generator unter MSSQL Server Manager. Ich habe Dateiausgabe, verschobene Dateien, verkettete Dateien und was nicht aus dem Abfragefenster.

Wie dieser einfachen Verkettung Befehl:

Exec master..xp_cmdshell 'type c:\bcp\sysobjects.txt >> c:\bcp\a.txt' 

Auch dieser Schöpfung/Ausgabe-Befehl:

SELECT @sql = 'bcp master..sysobjects out c:\bcp\sysobjects.txt -c -t\t -T -S' + @@servername 

REPLACE(@sql, 'sysobjects.txt', @EmpRecordsFILENAME) 

EXEC master..xp_cmdshell @sql 

Die Dateien wurden erstellt und mit diesen einfachen Befehlen verketteten!