2016-08-05 21 views
0

ファイル名があり、SQL Serverのテーブルに挿入する必要があります。私は知っている、私は一重引用符を挿入して挿入することができますが、このファイル名はちょっと難しいです。 ご協力いただければ幸いです。一重引用符を含む文字列の一重引用符をエスケープする

@filename:

'013095','013096','013213','013214','013815','013871','013872','13873','013874','013875','013876','013879','13877','13878' 2015-01-24.xls' 

私は、これは、クライアントが提供する非常に悪いファイル名ですけど、私はそれを戻すことができます前に、それを試してみることにしたかったです。

私はこれを達成するために2つのものの下に試してみました:

  1. はエスケープすることにより、単一引用符を交換したり、二重にするReplace関数を使用してください。

    set @FilenameFinal = Replace(@FileName,char(39), '''') 
    

私の究極の目標は、ファイル名の上に認識し、挿入しないストアドプロシージャからこの関数を呼び出すためにこの関数を正しく取得することです。

Set @index = 1 
Set @FilenameFinal = '' 
set @len = LEN(@FileName) 

while @index <= @len 
begin 
    set @char = Substring(@FileName,@index,1) 

    If (@char = char(39)) 
    begin 
     set @char = Replace(@char, char(39),'''') 
     --set @filename = Replace(@filename,Char(39),'''') 
    end 

    --set @FileName = @char + Substring(`enter code here, @index,1) 
    set @FilenameFinal = @FileNameFinal + @char 

    set @index = @index + 1 
end 

return @FilenameFinal 
+0

使用しているRDBMSにタグを付けてください – TheGameiswar

答えて

0

私はあなたの代わりにこの行をしたいと思う:

set @char = Replace(@char, '''', '''''') 

これは倍増引用符(エスケープ)に、すべての単一引用符を変更します。

また、WHILEループは必要ありません。ちょうど1つの線が物事を適切に逃れるべきです。

関連する問題