我的项目在 Visual Foxpro 中,我使用 MS SQL server 2008。当我批量触发 sql 查询时,一些查询不会执行。但是,不会引发错误。我还没有使用 BEGIN TRAN 和 ROLLBACK。应该做什么 ??
1 回答
这一切都取决于...您没有发布任何查询样本来向我们表明可能的失败。但是,我从 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() 调用中的查询顺序。但是,如果您可以提供更多关于您正在尝试做的事情及其样本的信息,我们也可以提供更具体的帮助。