我正在使用JTDS JDBC Driver。版本是1.2.4 假设我正在获取特定表的列元数据:
ResultSet columnsRs = meta.getColumns(null, [pattern], [table name], null);
while(columnRs.next()){
// I would like to know here if the current column is marked computed
}
以下是ID计算字段
的表定义CREATE TABLE [dbo].[C_Currencies](
[CurrencyID] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](150) NOT NULL,
[ID] AS ([CurrencyID]),
CONSTRAINT [pk_currency] PRIMARY KEY CLUSTERED
(
[CurrencyID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
答案 0 :(得分:2)
根据Java 7中的DatabaseMetaData.getColumns
JavaDoc,此信息将在IS_GENERATEDCOLUMN
列中返回,其值为YES
,NO
或空字符串(表示:未知) )。
这个专栏是在JDBC 4.0中添加的,据我所知,jTDS驱动程序只实现了JDBC 3.0。如果带有jTDS的ResultSet中不存在此列,那么您的选项要么切换到Microsoft SQL Server JDBC驱动程序(我假设它们的驱动程序支持此列),要么使用类似的东西自己查询SQL Server的系统视图(对于表ID
中的列C_Currencies
):
SELECT is_computed
FROM sys.tables t
INNER JOIN sys.columns c
ON c.object_id = t.object_id
WHERE t.name = 'C_Currencies'
AND c.name = 'ID'