我的项目是Visual Foxpro,我使用MS SQL server 2008。当我批量触发 sql 查询时,某些查询不会执行。但是,不会引发任何错误。我还没有使用BEGIN TRAN和ROLLBACK。应该怎么做??
这一切都取决于...您没有发布任何查询样本来指示我们可能失败。 但是,从 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 SET,也可以这样做,只需添加另一个没有"into #tmpSQLblah"上下文的查询即可。 然后,这些结果游标的所有实例都将基于"LocalVFPCursorName"前缀返回到 VFP。 如果要返回 3 个结果集,则 VFP 将打开 3 个游标,称为
LocalVFPCursorName
LocalVFPCursorName1
LocalVFPCursorName2
并将基于 SqlExec(( 调用中的查询顺序。 但是,如果您能提供更多关于您要做的事情及其样本的信息,我们也可以提供更具体的帮助。