OLE DB Driver for SQL Server의 FILESTREAM 지원
적용 대상: SQL Server - Windows만 해당
SQL Server 2008(10.0.x), OLE DB Driver for SQL Server부터 향상된 FILESTREAM 기능이 지원됩니다. 샘플은 FILESTREAM 및 OLE DB를 참조 하세요.
FILESTREAM은 SQL Server 또는 Windows 파일 시스템에 대한 직접 액세스를 통해 큰 이진 값을 저장하고 액세스하는 방법을 제공합니다. 큰 이진 값은 2GB보다 큰 값입니다. 향상된 FILESTREAM 지원에 대한 자세한 내용은 FILESTREAM(SQL Server)을 참조하세요.
데이터베이스 연결이 열리 @@TEXTSIZE
면 기본적으로 무제한으로 -1
설정됩니다.
Windows 파일 시스템 API를 사용하여 FILESTREAM 열에 액세스하고 업데이트할 수도 있습니다.
자세한 내용은 OpenSqlFilestream을 사용하여 FILESTREAM 데이터 액세스를 참조하세요.
FILESTREAM 열 쿼리
OLE DB의 스키마 행 집합은 열이 FILESTREAM 열인지 여부를 보고하지 않습니다. ITableDefinition
OLE DB에서는 FILESTREAM 열을 만드는 데 사용할 수 없습니다.
FILESTREAM 열을 만들거나 FILESTREAM 열인 기존 열을 검색하려면 sys.columns 카탈로그 뷰의 열을 사용할 is_filestream
수 있습니다.
다음은 스크립트 예제입니다.
-- Create a table with a FILESTREAM column.
CREATE TABLE Bob_01 (
GuidCol1 UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL UNIQUE DEFAULT NEWID(),
IntCol2 INT,
varbinaryCol3 VARBINARY(MAX) FILESTREAM
);
-- Find FILESTREAM columns.
SELECT name
FROM sys.columns
WHERE is_filestream = 1;
-- Determine whether a column is a FILESTREAM column.
SELECT is_filestream
FROM sys.columns
WHERE name = 'varbinaryCol3'
AND object_id IN (
SELECT object_id
FROM sys.tables
WHERE name = 'Bob_01'
);
하위 수준과의 호환성
클라이언트가 OLE DB Driver for SQL Server를 사용하여 컴파일되고 애플리케이션이 SQL Server 2012(11.x) 이상 버전 에 연결하는 경우 varbinary(max) 동작은 SQL Server 2005(9.x)의 SQL Server Native Client에서 도입한 동작과 호환됩니다. 즉, 반환되는 데이터의 최대 크기는 2GB로 제한됩니다. 2GB보다 큰 결과 값의 경우 잘림이 발생하고 "문자열 데이터 오른쪽 잘림" 경고가 반환됩니다.
데이터 형식 호환성이 80으로 설정된 경우 클라이언트 동작은 하위 수준 클라이언트 동작과 일치합니다.
SQL Server 2005(9.x) 이전에 릴리스된 SQLOLEDB 또는 다른 공급자를 사용하는 클라이언트의 경우 varbinary(max)가 이미지에 매핑됩니다.
설명
2GB보다 큰 varbinary(max) 값을 보내고 받기 위해 애플리케이션은 매개 변수 및 결과 바인딩을 사용합니다
DBTYPE_IUNKNOWN
. 매개 변수의 경우 공급자는 ISequentialStream 및 ISequentialStream을 반환하는 결과에 대해 IUnknown::QueryInterface를 호출해야 합니다.OLE DB의 경우 ISequentialStream 값과 관련된 검사가 완화됩니다. wType이
DBTYPE_IUNKNOWN
구조체에 있는DBBINDING
경우 dwPart에서 생략DBPART_LENGTH
하거나 데이터 길이(데이터 버퍼~0
의 오프셋 obLength)를 설정하여 길이 검사를 사용하지 않도록 설정할 수 있습니다. 이 경우 공급자는 값의 길이를 확인하지 않고 스트림을 통해 사용 가능한 모든 데이터를 요청하고 반환합니다. 이 변경 내용은 모든 LOB(큰 개체) 형식 및 XML에 적용되지만 SQL Server 2005(9.x) 이상 서버에 연결된 경우에만 적용됩니다. 이렇게 하면 기존 애플리케이션 및 하위 수준 서버에 대한 일관성 및 이전 버전과의 호환성을 유지하면서 개발자에게 더 큰 유연성을 제공합니다. 이 변경 내용은 주로 데이터를IRowset::GetData
전송하는 모든 인터페이스에ICommand::Execute
영향을 줍니다IRowsetFastLoad::InsertRow
.