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