0

我有一个从 SSMS 调用时运行良好的 SP。但是当我从用本机 C++ 编写的应用程序中调用它并使用 ODBC 连接到数据库时,该操作不会返回任何错误,但实际上在数据库中什么也不做。

我的 SP 从一些临时表中读取一些值,然后将它们插入数据库或更新它们。

我在 SP 中有一个事务来保护 SP 的所有代码,我几乎不调试我的 SP 并发现该函数将在第一次插入或更新时返回,所以什么也不做。所以我删除了部分工作的事务和功能,我的意思是它添加了一些项目,但将其中一些项目留在那里而不将它们添加到数据库中。这是我的 SP 的骨架:

--开始交易
声明@id bigint,@name nvarchar(50)
从 MyTable 中删除而不是(id IN(从 #MyTable 中选择 id))
DECLARE cur1 CURSOR FOR SELECT id, name FROM #MyTable
打开 cur1
而 1 != 0
开始
    将 cur1 提取到 @id、@name
    IF @@FETCH_STATUS != 0 中断;

    UPDATE MyTable SET [Name]=@name WHERE [id]=@id
    如果@@ROWCOUNT = 0
        插入 MyTable (ID, Name) 值 (@id, @name)
结尾
关闭 cur1
释放 cur1
--提交交易
4

2 回答 2

0

我通过添加到我的 SP 的开始来解决我的问题SET NOCOUNT ON,所以我认为当 SQL 由于执行我的 SQL 而返回多个结果集时,ODBC 在收到第一个结果集时关闭或取消命令。

于 2012-10-02T20:45:01.853 回答
0

您是否有可能在 ODBC 中启动了一个需要显式 COMMIT 才能结束的隐式事务(在调用 SP 之后)?SSMS 通常使用自动提交模式。

于 2012-08-21T16:15:08.637 回答