2012-10-30 14 views
3

我哪裏存儲在數據庫表條款的語句,在那之後我收到並使用select語句。動態其中SYBASE條件存儲過程

這裏是我的Sybase查詢,

"INSERT table(RUN_ID,RUN_DATE,GRGR_ID,SGSG_ID,COLUMN_NAME,ERROR_CODE)SELECT @pnRunId,getdate(),GRGR_ID,SGSG_ID,@COLUMN_NAME,@ERROR_CODE from table1_exct where + @WHERE_CLAUSE" 

@WHERE_CLAUSE = '@IKA_COLUMN_NAME IS NOT NULL' 

請幫助我如何實現這一目標。

+1

您是否遇到了困難:(i)將在where子句爲表? (ii)從表中選擇where子句並運行生成的SQL時? (iii)其他? – crw

回答

0

我覺得你可以插入你的where子句,但不知道如何運行它們。

這將是很難但不是不可能的。您必須使用遊標或循環來在VARCHAR中構建一塊Sql。

declare @Sql VARCHAR(2000) 

select @Sql = 'INSERT table(RUN_ID,RUN_DATE,GRGR_ID,SGSG_ID,COLUMN_NAME,ERROR_CODE)SELECT @pnRunId,getdate(),GRGR_ID,SGSG_ID,@COLUMN_NAME,@ERROR_CODE from table1_exct where ' 

while 1 = 1 
begin 
    declare @claus VARCHAR(200) 
    SET ROWCOUNT 1 
    SELECT @claus = where_clause from some_table 
    select @sql = @sql + @claus 
    delete some_table where where_clause = @claus 
    set rowcount 0 
end 

這有兩件事情來思考 - 它不提供WHERE和AND第一和subsquent條款(我相信你能做到這一點),它從源頭刪除您的where子句(你可以先把它們全部放入臨時標籤中以獲得它。)

如果你的子句全部在同一列上,那麼你可以在列中擁有LIKE表達式列表並加入到使用LIKE運算符的列表中 - 這可以很方便。

反正在上面的結束,運行SQL:

EXEC(@sql)

0

安倍晉三的答案是正確的,如果你建立一個動態的SQL查詢爲VARCHAR,您可以通過Exec的它EXEC(@varname)如果這只是一次性問題。

您可以考慮在ASE 15中使用XML功能。我們實際上經歷了一次深入的業務規則引擎完全相同的練習,並且在使用ASE 15內的xml功能合併計算列,case語句以及DB中XML文本中的where子句。

這裏的一些信息http://www.sypron.nl/xml.html

所以,我認爲這樣的解決方案可能比動態SQL多了幾分優雅的解決您的問題。

我們結束了不使用它,因爲我們不能讓生產XML支持(傳統2K頁號)...但我覺得,如果你的問題是足夠大,以支持實施的工作量,這可能會解決你的問題一些可以使用它(我們最終只是用java)。