2011-07-21 391 views
0

我想在DB2中的ALTER TABLE命令中運行子查詢。db2中alter table中的子查詢

ALTER TABLE user ALTER column userId SET GENERATED ALWAYS AS IDENTITY 
                (start with 2646) 

上述查詢工作正常。但是我想像下面那樣從查詢本身的價值開始。

ALTER TABLE user ALTER column userId SET GENERATED ALWAYS AS IDENTITY 
          (start with (SELECT MAX(userId) FROM user)) 

我試圖用函數和存儲過程來實現這一點。但問題是表名應該在兩者中指定。我想改變近40個表格的表格查詢。

CREATE FUNCTION findMax (tablename VARCHAR(64), columnname VARCHAR(255)) 
          RETURNS INTEGER 
          RETURN SELECT MAX(columnname) 
             FROM tablename 

回答

0

我之前通過使用sql腳本並對數據庫進行多次傳遞完成此操作。

select 'findMax(' || tabname || ' , ' || colname || ')' 
from syscat.columns where identity = 'Y' 

簡單地說就是SQL的輸出重定向到一個文本文件,然後運行文本文件作爲SQL:

,如果您使用的是findMax功能,如果你有這樣的SQL你可以這樣做。

你可以直接用ALTER TABLE來做到這一點,但我認爲你需要三次通過。