我的项目在Visual Foxpro中,我使用MS SQL server 2008.当我批量触发sql查询时,某些查询不会执行。但是,不会抛出任何错误。我还没有使用过BEGIN TRAN和ROLLBACK。应该做什么 ??
答案 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()调用中的查询序列。但是如果你能提供更多关于你想做什么和他们的样品,我们也可以提供更具体的帮助。