2011-01-12 4 views
1

SQL Server 2008에서는 VarBinary 매개 변수를 허용하는 저장 프로 시저가 있습니다. 매개 변수가 메모리에있는 동안 SQL Server의 % temp % 디렉터리에 저장하려고합니다.메모리 VarBinary의 TSQL을 텍스트 파일로 변환 하시겠습니까?

메모리 blob (C# 응용 프로그램에서 바이트 []로)에서 텍스트 파일로 이동하려면 어떻게해야합니까? blob은 디스크 상주 테이블에 존재하지 않습니다.

저는 TSQL sproc 호출에 대해 CLR 스토어드 프로 시저를 사용하는 것에 관심이 있습니다. 지금까지는 (대부분) 아래와 같습니다.

문제 # 1은 inputBytes []가 8k 입력 크기로 고정되어 있다고 생각합니다.

문제 # 2는 내가 관리 Studio 또는 VS DB 단위 테스트 내에서 테스트 할 수 있도록 매개 변수로 varbinary 값을 전달하는 적절한 SQL을 생각해 낼 수 없다는 것입니다.

public static void FileWrite(string inputName , byte[] inputBytes) 
using (FileStream fileStream = new  
    FileStream(Environment.GetEnvironmentVariable("TEMP") + "\\" + inputName, 
    FileMode.OpenOrCreate, FileAccess.Write)) 
    { 
     using (BinaryWriter binaryWriter = new BinaryWriter(fileStream)) 
     { 
      binaryWriter.Write(inputBytes); 
    } 
} 

감사합니다. 당신은 C# 코드에서 바이트 []이있는 경우

답변

0

, 당신은 쉽게 파일로 작성할 수

http://msdn.microsoft.com/en-us/library/system.io.file.writeallbytes.aspx

을겠습니까 당신을 위해이 일?

EDIT : SQL Server에서 파일 저장을 시작해야하는 경우 또 다른 아이디어는 SQL Server CLR Function을 만드는 것일 수 있습니다. 이렇게하면 SQL Server에서 C# 코드를 실행할 수 있습니다.

EDIT 2 : Google 검색을 수행했으며 CodeProject에 대한 기사를 찾았습니다. 이 기사에서는 BLOB 데이터를 압축하고 압축을 풀고있다. 여기의 속임수는 SqlBytes 매개 변수 유형과 일반 오래된 바이트 []를 사용하는 것입니다. 다음은 기사와 업데이트 된 질문을 읽은 후에 생각해봤을 때 (테스트받지 않은) 코드입니다.

using System; 
using System.Data; 
using System.Data.SqlClient; 
using System.Data.SqlTypes; 
using Microsoft.SqlServer.Server; 

using System.IO; 
using System.IO.Compression; 

public partial class UserDefinedFunctions 
{ 
    // Setting function characteristics 
    [Microsoft.SqlServer.Server.SqlFunction(IsDeterministic=true, DataAccess=DataAccessKind.None)] 
    public static void fn_WriteToFile(string fileName, SqlBytes blob) 
    { 
     if(blob.IsNull || String.IsNullOrEmpty(fileName)) 
     { 
      return; 
     } 

     String fullFileName = Path.Combine(Environment.GetEnvironmentVariable("TEMP"), fileName); 
     using(FileStream fileStream = new FileStream(fullFileName, FileMode.OpenOrCreate, FileAccess.Write)) 
     using(BinaryWriter binaryWriter = new BinaryWriter(fileStream)) 
     { 
      binaryWriter.Write(blob.Buffer); 
     } 
    } 
}; 

당신의 생각을 알려주세요.

+0

감사합니다. CLR sproc을 향해 나를 가르키고있는 동안, 나는 그 길로 나 혼자 갈 것이 었습니다. 나는 무제한 크기의 VarBinary (Max)를 가져 와서 CLR sproc에 바이트로 보내는 방법을 알아낼 수 없으므로 쓸 수있다. 원래 게시물을 편집 할 시간. 감사. – Snowy

+0

다나, 정말 끝내주는 군. 키는 SqlBytes 형식입니다. 감사! – Snowy

+0

문제 없습니다. 그것을 행운을 빌어 요 :) – dana

관련 문제