2010-12-29 7 views
1

Ich habe nach einer Lösung gesucht, wie der Dateiname von SQL Server abgerufen werden kann. Ich weiß, dass es möglich ist, wenn Sie C# verwenden. Aber wie ist es in SQL gemacht?Abrufen des Dateinamens der Hochladedatei in SQL

Zum Beispiel habe ich eine Datei (Beispiel: uploadfile.txt) in C: \, die gerade hochgeladen wird. Ich habe eine Tabelle mit einem Feld "Dateiname". Wie bekomme ich den Dateinamen dieser Datei?

Dies ist das Skript, das ich im Moment habe.

-- Insert to table 
BULK INSERT Price_Template_Host 
FROM 'C:\uploadfile.txt' 
WITH 
(
    FIELDTERMINATOR = '\t', 
    ROWTERMINATOR = '\n' 
) 

-- Insert into transaction log table filename and datetime() 
+4

Sie müssen wirklich mehr ausarbeiten. Ihre Frage ergibt keinen Sinn. –

+0

ist es jetzt klar? frage mich nur. Die Idee ist, den Dateinamen "uploadfile.txt" in eine select-Anweisung zu bekommen. – Musikero31

+1

Was verwendest du zum Hochladen? –

Antwort

1

Nach bestem Wissen und Gewissen, gibt es keine direkte Methode in T-SQL eine Datei auf dem Dateisystem zu lokalisieren. Nach all dem soll die Sprache nicht verwendet werden. Von dem von Ihnen bereitgestellten Skript erfordert BULK INSERT, dass der vollständig qualifizierte Dateiname zum Zeitpunkt des Anweisungsaufrufs bereits bekannt ist.

Es gibt natürlich eine ganze Reihe von Möglichkeiten, wie Sie eine Datei identifizieren/lokalisieren können, außer T-SQL zum Beispiel mit SSIS, vielleicht könnten Sie xp_cmdshell verwenden (hat Sicherheitseinschränkungen) oder ein verwaltetes Code-Modul erstellen SQL Server, um diese Aufgabe auszuführen.

Um Ihnen eine spezifische Anleitung zu geben, kann es hilfreich sein, wenn Sie uns alle Details des Geschäftsprozesses, den Sie implementieren möchten, zur Verfügung stellen.

1

Ich würde dieses Problem persönlich mit einem SSIs-Paket verbinden, das Ihnen viel mehr Flexibilität in Bezug auf die Belastung und die anschließende Protokollierung geben würde. Wenn Sie jedoch diese auf dem Tun durch T-SQL festgelegt sind, sollten dynamisch aufgebauten SQL exec'ing:

declare @cmd nvarchar(max), @filename nvarchar(255) 
set @filename = 'C:\uploadfile.txt' 

set @cmd = 
'BULK INSERT Price_Template_Host 
FROM '''[email protected]+''' 
WITH 
(
    FIELDTERMINATOR = ''\t'', 
    ROWTERMINATOR = ''\n'' 
)' 

-- Debug only 
print @cmd 
-- Insert to table 
exec(@cmd) 

-- Insert into transaction log table filename and datetime() 
insert into dbo.LoadLog (filename, TheTime) 
values (@filename, getdate()) 

Wenn ich Ihre Frage richtig verstanden habe, diese paramaterizes den Dateinamen, damit Sie sie erfassen können weiter unten im Skript.