【发布时间】:2010-10-22 21:42:19
【问题描述】:
如何将选定的字段值存储到查询中的变量中并在更新语句中使用?
这是我的程序:
我正在编写一个 SQL Server 2005 T-SQL 存储过程,它执行以下操作:
- 从发票表中获取发票 ID 列表并存储到光标
- 从光标中获取发票 ID -> tmp_key 变量
- foreach tmp_key 从客户表中查找发票客户主要联系人 ID
- 使用主要联系人 ID 更新客户端联系人密钥
- 关闭光标
这是我的代码:
DECLARE @tmp_key int
DECLARE @get_invckey cursor
set @get_invckey = CURSOR FOR
select invckey from tarinvoice where confirmtocntctkey is null and tranno like '%115876'
OPEN @get_invckey
FETCH NEXT FROM @get_invckey into @tmp_key
WHILE (@@FETCH_STATUS = 0)
BEGIN
SELECT c.PrimaryCntctKey as PrimaryContactKey
from tarcustomer c, tarinvoice i
where i.custkey = c.custkey and i.invckey = @tmp_key
UPDATE tarinvoice set confirmtocntctkey = PrimaryContactKey where invckey = @tmp_key
FETCH NEXT FROM @get_invckey INTO @tmp_key
END
CLOSE @get_invckey
DEALLOCATE @get_invckey
如何存储 PrimaryContactKey 并在以下更新语句的 set 子句中再次使用它?我是创建一个游标变量还是创建另一个 int 类型的局部变量?
【问题讨论】:
-
正如@GilaMonster 在下面回答的那样,整个操作可以是单个 UPDATE 语句(“基于集合的操作”,不要与 t-sql SET statement 混淆)这是一种更好的方法(更快执行,更少的开销和显着更少的代码)。我只是指出这一点,因为问题和所有当前的热门答案都是关于如何编写 SET 语句,但这确实不是最好的方法。
标签: tsql database-cursor