2011-09-21 3 views

답변

2

현재 (3.0) Microsoft 드라이버는 TVP 전달을 지원하지 않습니다.

한 시점에서, 마이크로 소프트는 대량 복사 대 TVP에 대한 투표를 권유했다 :

http://blogs.msdn.com/b/jdbcteam/archive/2011/09/22/tvp-or-bulk-copy.aspx

TVP 더 많은 표를 얻었으나, 실제로는 다있어 무슨 볼 일이다. 최신 버전의 CTP는 TVP를 지원하지 않습니다.

0

나는이 문제를 혼자서 해결했습니다. BLR 매개 변수를 사용하여 CLR .Net Stored Proc with를 만들었습니다. 이 BLOB는 직렬화 된 INT의 목록 일뿐입니다. T-SQL 또는 .Net CLR SP를 사용하여 역 직렬화 할 수 있습니다..Net CLR SP의 성능이 뛰어났습니다. 이는 내 프로젝트에서 정말로 중요했습니다.

0

이 질문은 SQL Server 2008에 관한 것이지만 실제로는 테이블 값 매개 변수를 전달할 수 없었지만 지금은 그렇습니다. 이 내용은 여기 JDBC driver manual에 설명되어 있습니다. 예를 들어 다음과 같이 수행 할 수 있습니다.

SQLServerDataTable table = new SQLServerDataTable(); 
table.addColumnMetadata("i" ,java.sql.Types.INTEGER); 
table.addRow(1); 
table.addRow(2); 
table.addRow(3); 
table.addRow(4); 

try (SQLServerPreparedStatement stmt= 
    (SQLServerPreparedStatement) connection.prepareStatement(
     "SELECT * FROM some_table_valued_function(?)")) { 

    // Magic here: 
    stmt.setStructured(1, "dbo.numbers", table); 

    try (ResultSet rs = stmt.executeQuery()) { 
     ... 
    } 
} 

I've also recently blogged about this here