我正在使用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)
答案 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'