如何检测列是否为计算列

时间:2011-09-29 18:01:04

标签: java sql-server-2000 calculated-columns

我正在使用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获取信息。

我知道我可以查询syscolumns但我想避免它。

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)

1 个答案:

答案 0 :(得分:1)

查询syscolumns,其中包含iscomputed列。

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'