2013-09-28 98 views
0

我的項目是在Visual Foxpro中,我使用MS SQL服務器2008年。當我批量地啓動SQL查詢時,一些查詢不執行。但是,不會引發錯誤。我還沒有使用過BEGIN TRAN和ROLLBACK。應該做什麼 ??批量SQL查詢不執行

回答

0

這一切都取決於...您沒有任何您的查詢樣本發佈給我們一個可能的失敗的跡象。但是,從VFP到SQL的一個很好的反應是構建成一個字符串(我更喜歡使用TEXT/ENDTEXT來進行可讀性),然後將整個值發送到SQL。如果本地VFP有任何基於「參數」的值,則可以使用「?」以表明它將來自一個變量到SQL。然後,你可以批量都在一個VS多個單獨的查詢......

vfpField = 28 
vfpString = 'Smith' 

text to lcSqlCmd noshow 
    select 
     YT.blah, 
     YT.blah2 
     into 
     #tempSqlResult 
     from 
     yourTable YT 
     where 
     YT.SomeKey = ?vfpField 

    select 
     ost.Xblah, 
     t.blah, 
     t.blah2 
     from 
     OtherSQLTable ost 
      join #tempSqlResult t 
       on ost.Xblah = t.blahKey; 

    drop table #tempSqlResult; 
endtext 

nHandle = sqlconnect("your connection string") 
nAns = sqlexec(nHandle, lcSqlCmd, "LocalVFPCursorName") 

不,我沒有在這裏捕捉錯誤,只是爲了顯示原理和可讀性。我知道示例查詢可以很容易地通過連接來完成,但是如果您正在使用某些預集合並希望將它們放入臨時工作區域,例如查詢中的本地化VFP遊標以用作下一步,則會通過#tempSqlResult工作,因爲「#」表示無論當前連接句柄是什麼,SQL上的臨時表。

如果要從單個SQL調用中返回多個RESULT SET,那麼也可以這樣做,只需添加另一個沒有「into #tmpSQLblah」上下文的查詢。然後,這些結果遊標的所有實例都將根據「LocalVFPCursorName」前綴被重新帶回VFP。如果要返回3個結果集,然後VFP將有3個遊標打開名爲

LocalVFPCursorName 
LocalVFPCursorName1 
LocalVFPCursorName2 

,將基於SQLEXEC()調用查詢的序列。但如果您可以提供更多關於您想要做的事情和他們的樣品,我們也可以提供更具體的幫助。