2011-09-29 69 views
0

我正在使用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

查詢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' 
+0

「SELECT * FROM dbo.syscolumns WHERE iscomputed = 1」我看到了解決方案,但我想知道是否有一種方式來獲得從DatabaseMetaData的或從ResultSetMetaData的信息,而無需編寫另一個查詢那。 – pablosaraiva

+0

由於沒有其他答案發布,我會接受你的唯一方法。但是,在我的程序中,我最終使用了RecordSetMetaData中的isReadOnly方法。 – pablosaraiva