0

我的项目在 Visual Foxpro 中,我使用 MS SQL server 2008。当我批量触发 sql 查询时,一些查询不会执行。但是,不会引发错误。我还没有使用 BEGIN TRAN 和 ROLLBACK。应该做什么 ??

4

1 回答 1

0

这一切都取决于...您没有发布任何查询样本来向我们表明可能的失败。但是,我从 VFP 到 SQL 的反应很好的一件事是构建一个字符串(我更喜欢使用 TEXT/ENDTEXT 来提高可读性),然后将整个值发送到 SQL。如果有任何来自本地 VFP 的基于“参数”的值,您可以使用“?” 表示它将来自一个变量到 SQL。然后,您可以在单个查询和多个单独查询中批量处理...

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 调用返回 MULTIPLE RESULT SETs,您也可以这样做,只需添加另一个没有“into #tmpSQLblah”上下文的查询。然后,这些结果游标的所有实例都将根据“LocalVFPCursorName”前缀返回到 VFP。如果您返回 3 个结果集,则 VFP 将打开 3 个游标,称为

LocalVFPCursorName
LocalVFPCursorName1
LocalVFPCursorName2

并将基于 SqlExec() 调用中的查询顺序。但是,如果您可以提供更多关于您正在尝试做的事情及其样本的信息,我们也可以提供更具体的帮助。

于 2013-09-28T17:01:18.947 回答