SQL Server转换异常:将数据类型varchar转换为数字时出错
问题描述:
我正在处理目标是将现有应用程序转换为SQL Server的项目。但是,我遇到了ID生成问题 - 特别是数据类型的转换。SQL Server转换异常:将数据类型varchar转换为数字时出错
用于我的ID列中的休眠注解如下:
@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)
的ID列,而$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在这种情况下不起作用。不幸的是,在这个时候改变数据库定义不是一种选择。
是否有任何全局设置会在hibernate或SQL Server中强制执行此转换?因为我使用hibernate来生成ID,所以在将此对象提交给数据库之前,我无法控制生成的用于获取ID的SQL。
从错误消息看,它看起来不像问题是将NUMERIC(38,0)装入VARCHAR(50)中。看起来反过来 - 尝试将VARCHAR(50)转换为NUMERIC(38,0)。 – 2010-07-08 17:01:18
另请注意,如果您的SQL Server中有IDENTITY列,则在大多数情况下基本上不应插入显式值。 (并且SSMA有一些逻辑可以将Oracle序列用法转换为SQL Server IDENTITY,但是您必须在SSMA中配置它) – IgorK 2011-02-02 11:08:15