![]() |
1
9
你的问题是你根本不应该使用光标!这是上面给出的示例的代码。
您也不应该在触发器中使用光标,这会降低性能。如果有人在insert中添加100000行,这可能需要几分钟(甚至几小时),而不是几毫秒或几秒钟。我们在这里替换了一个(在我开始这份工作之前),并将该表的导入时间从40分钟减少到45秒。 应该检查使用游标的任何生产代码,用正确的基于集合的代码替换它。根据我的经验,90%以上的游标都可以以基于集合的方式编写。 |
![]() |
2
4
这是对触发器的简单误解。。。你根本不需要光标
基本上,这段代码的作用是检查该列的数据是否已更新。如果是,它会比较新数据和旧数据,如果不同,它会插入到日志表中。
|
![]() |
3
3
Ryan,您的问题是@@FETCH\u状态对于连接中的所有游标都是全局的。
文档中对此进行了解释,可以在MSDN上找到 here .
值得注意的是,这种行为不适用于嵌套游标。我已经做了一个快速的例子,它在SQLServer2008上返回预期的结果(50)。
|
![]() |
4
1
此代码不会从游标获取任何其他值,也不会增加任何值。事实上,没有理由在这里实现游标。 您的整个代码可以重写为:
|
![]() |
5
1
以下是一个例子:
在X表中,您可以使用第二列编写额外的行为代码,该列专门描述如何处理该列(假设您希望某些列一直发布,但其他列仅在值更改时发布)。重要的是,这是一个将行拆分为每列的交叉连接技术的示例,但是还有很多事情可以做。请注意,完全联接允许对插入、删除以及更新进行操作。 this forum 更多关于这方面的信息。 |
![]() |
6
0
您应该将代码更改为
|
![]() |
ybou · 需要帮助从SQL 2005查询中删除过时的=*连接运算符 7 年前 |
![]() |
Robert · 将多个分隔符分隔的字段视为不同的行 8 年前 |
![]() |
hud · 执行存储过程会导致错误 8 年前 |
![]() |
Gonzalo · 如何将存储过程的结果插入到新表中? 9 年前 |