SQL Server 报错:com.microsoft.sqlserver.jdbc.SQLServerException: The "variant" data type is not supported.

查询 SQL SERVER 中某张表结构,sql 语句如下:

SELECT
    tb.name AS tableName,
    col.name AS columnName,
    col.max_length AS length,
    col.is_nullable AS isNullable,
    t.name AS type,
    (
    SELECT
        TOP 1 ind.is_primary_key
    FROM
        sys.index_columns ic
        LEFT JOIN sys.indexes ind ON ic.object_id = ind.object_id AND ic.index_id= ind.index_id AND ind.name LIKE ‘PK_%‘
    WHERE
        ic.object_id = tb.object_id AND ic.column_id= col.column_id
    ) AS isPrimaryKey,
    com.value AS comment
FROM
    sys.TABLES tb
    INNER JOIN sys.columns col ON col.object_id = tb.object_id
    LEFT JOIN sys.types t ON t.user_type_id = col.user_type_id
    LEFT JOIN sys.extended_properties com ON com.major_id = col.object_id
    AND com.minor_id = col.column_id
WHERE
    tb.name = ‘表名‘

该 sql 可以正常执行,但是当把 sql 放到 jdbcTemplate 中执行时报一下错误:

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The "variant" data type is not supported.

原因是 sql 语句 select 后面有 sql_variant 类型的属性,在 JDBC 中不支持它。使用 sp_columns 命令最终查出 sys.extended_properties 表的 value 属性的 TYPE_NAMEsql_variant 类型的,sql 如下:

sp_columns extended_properties

解决方法是使用 CONVERT 函数将该属性转成 varchar 类型。

CONVERT 函数的用法参考:SQL Server 中 CONVERT() 函数的使用

修改后的 sql 语句为:

SELECT
    tb.name AS tableName,
    col.name AS columnName,
    col.max_length AS length,
    col.is_nullable AS isNullable,
    t.name AS type,
    (
    SELECT
        TOP 1 ind.is_primary_key
    FROM
        sys.index_columns ic
        LEFT JOIN sys.indexes ind ON ic.object_id = ind.object_id AND ic.index_id= ind.index_id AND ind.name LIKE ‘PK_%‘
    WHERE
        ic.object_id = tb.object_id AND ic.column_id= col.column_id
    ) AS isPrimaryKey,
    CONVERT(varchar(200), com.value) AS comment
FROM
    sys.TABLES tb
    INNER JOIN sys.columns col ON col.object_id = tb.object_id
    LEFT JOIN sys.types t ON t.user_type_id = col.user_type_id
    LEFT JOIN sys.extended_properties com ON com.major_id = col.object_id
    AND com.minor_id = col.column_id
WHERE
    tb.name = ‘表名‘

参考:

com.microsoft.sqlserver.jdbc.SQLServerException: The "variant" data type is not supported.

原文地址:https://www.cnblogs.com/wu726/p/9359732.html

时间: 2024-10-18 03:23:23

SQL Server 报错:com.microsoft.sqlserver.jdbc.SQLServerException: The "variant" data type is not supported.的相关文章

Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 不支持“variant”数据类型。

mybatis执行sqlserver的sql报错 com.microsoft.sqlserver.jdbc.SQLServerException: 不支持"variant"数据类型. at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190) ~[sqljdbc4-4.0.jar:na] at com.microsoft.sqlserver.jdb

### Error updating database. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 必须声明标量变量 "@[email protected]"。(sql少一个逗号)【??】

(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,[??],?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)### Error updating database. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 必须声明标量变量 "@[email protected]".### The erro

com.microsoft.sqlserver.jdbc.SQLServerException: 到主机 的 TCP/IP 连接失败。 java.net.ConnectException: Connection refused: connect

问题描述:最简单的数据库连接报错,到主机  的 TCP/IP 连接失败.(win 7 操作系统) 错误信息: com.microsoft.sqlserver.jdbc.SQLServerException: 到主机  的 TCP/IP 连接失败. java.net.ConnectException: Connection refused: connect package sqlconnect; import java.sql.*; public class sqlconnect { public

com.microsoft.sqlserver.jdbc.SQLServerException: 用户 'sa' 登录失败。

com.microsoft.sqlserver.jdbc.SQLServerException: 用户 'sa' 登录失败. at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:196) at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:246) at com.micr

Caused by com microsoft sqlserver jdbc SQLServerException

1.错误描述 org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL []; 索引 1 超出范围.; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: 索引 1 超出范围. at org.springframework.jdbc.support.SQLStateSQLExcepti

com.microsoft.sqlserver.jdbc.SQLServerException: 结果集没有当前行

参考博客com.microsoft.sqlserver.jdbc.SQLServerException: 结果集没有当前行 java获取结果集,if(rs!=null),和while(rs.next())区别  com.microsoft.sqlserver.jdbc.SQLServerException: 结果集没有当前行. st = conn.createStatement(); ResultSet rs = st.executeQuery(sql); if(rs!=null) {//rs.

atitit.故障排除------有时会错误com.microsoft.sqlserver.jdbc.SQLServerException: Connection reset by peer: soc

atitit.故障排除------有时会错误com.microsoft.sqlserver.jdbc.SQLServerException: Connection reset by peer: socket write error 1. 现象::::有时会错误,大概20% 会中间... 1 2. 原因::原因:::sql server的bug 或者限制,查询的时候儿使用资源太多超过操作系统/防火墙/安全软件的限制.. 1 3. 解决方案:::retry3机制 1 4. 参考 1 1. 现象:::

[Exception JavaWeb 1] - Cause: com.microsoft.sqlserver.jdbc.SQLServerException: '@P2' 附近有语法错误。

严重: Servlet.service() for servlet [springMVC] in context with path [/ExceptionManageSystem] threw exception [Request processing failed; nested exception is org.springframework.jdbc.UncategorizedSQLException: ### Error querying database. Cause: com.mi

com microsoft sqlserver jdbc SQLServerException 到主机 的 TCP/I

1.错误描述 2017-04-05 11:30:08,031 [localhost-startStop-1] DEBUG [org.springframework.jdbc.core.JdbcTemplate] - Executing SQL query [select getdate()] 2017-04-05 11:30:29,163 [localhost-startStop-1] ERROR [com.alibaba.druid.pool.DruidDataSource] - init d