我正在使用 SQL Server 2000 和 Java。
我正在创建一个应用程序,除其他外,它从表中读取元数据,在另一台服务器上重新创建它们并携带数据。
其中一个表是这样创建的:
CREATE TABLE some_table (
Date datetime NOT NULL,
Code int NOT NULL,
SameCodeAgainWTF AS Code
)
如何检测“SameCodeAgainWTF”列是计算列,以便我在数据迁移阶段不会尝试在其中插入值?
我已经从连接中获取了 DatabaseMetaData 对象。但我无法找到为我提供该信息的方法。
...
DatabaseMetaData dbMetaData = connection.getMetaData();
...
提前致谢。
编辑1:
我想知道是否有无需运行另一个查询的解决方案。是否有办法从 DatabaseMetaData 或 ResultSetMetaData 获取信息。
我知道我可以查询系统列,但我想避免它。
SELECT
sysobjects.name AS TableName,
syscolumns.name AS ColumnName
FROM syscolumns
INNER JOIN sysobjects
ON syscolumns.id = sysobjects.id
AND sysobjects.xtype = 'U' --User Tables
WHERE syscolumns.iscomputed = 1
From: Get List of Computed Columns in Database Table (SQL Server)
最佳答案
查询syscolumns其中包含一个 iscompulated
列。
SELECT o.name as TableName, c.name as ComputedColumnName
FROM sysobjects o
INNER JOIN syscolumns c
ON o.id = c.id
AND c.iscomputed = 1
WHERE o.xtype = 'u'
关于java - 如何检测列是否是计算列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7601448/