我有一个从 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 --提交交易