Как передать табличные параметры (массив-подобный параметр) в хранимую процедуру в Microsoft SQL Server 2008 R2 с использованием JDBC?

sql-server sql-server-2008 stored-procedures jdbc jtds

1915 просмотра

3 ответа

566 Репутация автора

Как передать таблично-значимые параметры (как в массиве) в хранимую процедуру в Microsoft SQL Server 2008 R2 с помощью драйвера JDBC Microsoft SQL Server 2008 R2? Возможно ли это с помощью jTDS?

Автор: smikesh Источник Размещён: 21.09.2011 03:26

Ответы (3)


2 плюса

822 Репутация автора

Решение

Текущий (3.0) драйвер Microsoft не поддерживает передачу TVP.

В какой-то момент Microsoft собирала голоса для TVP против Bulk Copy:

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

TVP получил больше голосов, но еще неизвестно, что на самом деле было сделано. Последняя версия CTP для версии 4.0, по-видимому, не поддерживает TVP.

Автор: Corey Cole Размещён: 30.11.2011 11:30

0 плюса

566 Репутация автора

Я решил эту проблему самостоятельно. Я создал CLR .Net Stored Proc с принимает параметр BLOB. Этот BLOB - просто список сериализованных INT. Его можно десериализовать, используя T-SQL или .Net CLR SP. .Net CLR SP имеет лучшую производительность, что было очень важно для моего проекта.

Автор: smikesh Размещён: 13.01.2012 10:44

1 плюс

146248 Репутация автора

Хотя этот вопрос касался SQL Server 2008, и хотя в то время было невозможно передать табличные параметры, сейчас это так. Это задокументировано здесь в руководстве по драйверу JDBC . Например, это можно сделать так:

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()) {
        ...
    }
}

Я также недавно написал об этом здесь .

Автор: Lukas Eder Размещён: 30.10.2017 12:31
Вопросы из категории :
32x32