批处理中的SQL查询不会执行

时间:2013-09-28 07:20:11

标签: sql sql-server-2008 foxpro

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

1 个答案:

答案 0 :(得分: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" )

不,我在这里没有错误捕获,只是为了显示原理和可读性。我知道可以通过连接轻松完成示例查询,但是如果您正在使用一些预聚合并希望将它们放入临时工作区域(如查询中的Localized VFP游标)以用作下一步,那么通过#tempSqlResult工作为“#”表示SQL上的临时表,无论当前连接句柄是什么。

如果要从单个SQL调用返回MULTIPLE RESULT SET,也可以这样做,只需添加另一个没有“into #tmpSQLblah”上下文的查询。然后,这些结果游标的所有实例将根据“LocalVFPCursorName”前缀返回到VFP。如果您返回3个结果集,那么VFP将打开3个游标,名为

LocalVFPCursorName
LocalVFPCursorName1
LocalVFPCursorName2

将基于SqlExec()调用中的查询序列。但是如果你能提供更多关于你想做什么和他们的样品,我们也可以提供更具体的帮助。