2010-07-08 6 views
0

Я работаю над проектом, целью которого является преобразование существующего приложения в SQL Server. Тем не менее, я сталкиваюсь с проблемами с генерированием ID, в частности, с преобразованием типов данных.Исключение преобразования SQL Server: ошибка преобразования типа данных varchar в числовой

The Hibernate аннотации для моего удостоверения колонки следующим образом:

@Id 
@GeneratedValue(generator="ID_GEN", strategy=GenerationType.TABLE) 
@TableGenerator(name="ID_GEN", table="[$SSMA_seq_SEQ_EXAMPLE_ID]") 
@Column(name="ID", unique="true", nullable="false") 
public String getId() { 
    return this.id; 
} 

Этот идентификатор столбца этой таблицы карты к varchar(50), в то время как $SSMA_seq_SEQ_EXAMPLE_ID карты на таблицу с одной id колонки с типом данных numeric(38,0).

Когда я пытаюсь вставить (создавая объект Java и сохраняя его), я получаю следующее исключение: com.microsoft.sqlserver.jdbc.SQLServerException: Error converting data type varchar to numeric.

Концептуально, имеет смысл, что numeric(38,0) будет вписываться в varchar(50), но похоже, что SQL Server implicit conversion в этом случае не работает. К сожалению, изменение определения базы данных на данный момент не является опцией.

Существуют ли какие-либо глобальные настройки, которые будут вынуждать это преобразование либо в спящем режиме, либо в SQL Server? Поскольку я использую hibernate для генерации идентификаторов, у меня нет большого контроля над SQL, который создается для захвата идентификатора, прежде чем передать этот объект в базу данных.

+2

Из сообщения об ошибке не похоже, что проблема связана с NUMERIC (38, 0) в VARCHAR (50). Похоже, что все наоборот - пытается преобразовать VARCHAR (50) в NUMERIC (38, 0). –

+0

Также обратите внимание, что если у вас есть столбец IDENTITY на вашем SQL Server, в большинстве случаев он не должен вставляться с явными значениями. (и SSMA имеет некоторую логику для преобразования использования последовательностей Oracle в SQL Server IDENTITY, но вам нужно будет настроить его в SSMA) – IgorK

ответ

0

Я закончил писать пользовательский генератор, который предполагал известные типы данных и делал преобразования. Для получения полной информации см. this.