2010-12-29 3 views
1

私は、SQL Serverを使用する際のファイル名の取得方法に関する解決策を探していました。あなたがC#を使っているなら、それが可能であることは分かっています。しかし、それはSQLでどのように行われますか?アップロードファイルのファイル名をSQLで取得する

たとえば、C:\にアップロードされるファイル(例:uploadfile.txt)があります。フィールド "filename"を持つテーブルがあります。このファイルのファイル名を取得するにはどうすればよいですか?

これは私が今のところ持っているスクリプトです。私の知る限り

-- 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

本当にもっと詳しく説明する必要があります。あなたの質問は意味をなさない。 –

+0

今はっきりしていますか?ただ疑問に思う。その考え方は、select文でファイル名 "uploadfile.txt"を取得することです。 – Musikero31

+1

あなたはアップロードを行うために何を使用していますか? –

答えて

1

、ファイルシステム上のファイルを見つけるためにT-SQLには直接法はありません。結局のところ、これはその言語が使われることを意図したものではありません。あなたが提供したスクリプトから、BULK INSERTは、ステートメント呼び出し時に完全修飾ファイル名がすでにわかっている必要があります。

もちろん、SSISを使用してT-SQLを使用する以外に、xp_cmdshell(セキュリティ上の注意点があります)を使用することも、管理されたコードモジュールを作成することもできますSQL Serverを使用してこのタスクを実行します。

具体的な指針を提供するには、実装しようとしているのビジネスプロセスの詳細を私たちにすべて提供することができます。

1

私はこの問題をSSIパッケージに個人的に付け加えることになります。これにより、負荷とそれ以降のロギングの柔軟性が大幅に向上します。

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()) 

私が正しくあなたの質問を理解していれば、あなたがさらに下にそれをキャプチャすることができるように、これはファイル名をparamaterizes:あなたはT-SQLを介してこれを行う上で設定している場合は、動的に構築されたSQLをexec'ing考えますスクリプトで

関連する問題