【问题标题】:T-SQL: Set Operations Equivalent for cursor operationT-SQL:为游标操作设置等效操作
【发布时间】:2013-04-27 03:33:27
【问题描述】:

我有一个如下表,我在其中使用游标进行迭代以将一个值替换为另一个值。 有没有办法在 SQL 中使用集合操作来做到这一点?

在本例中,我会将值为 2525 的列替换为值 255,并使用游标进行迭代。

company_name_id    replacement_company_name_id
2525               255
11000201010737     10000701010293
12000301010533     12000301010532

这是我正在运行的代码:

declare @company_name_id bigint, @replacement_company_name_id bigint
declare company_name_cursor cursor for
select
    company_name_id
    , replacement_company_name_id
from #replacements

open company_name_cursor
fetch next from company_name_cursor into @company_name_id, @replacement_company_name_id

while @@FETCH_STATUS <> -1
begin
    update user_job_during_school_job
    set company_name_id = @replacement_company_name_id
    where company_name_id = @company_name_id

    fetch next from company_name_cursor into @company_name_id, @replacement_company_name_id
end
close company_name_cursor
deallocate company_name_cursor

【问题讨论】:

    标签: sql-server tsql cursor set-operations


    【解决方案1】:

    试试这个 -

    UPDATE uj
    SET company_name_id = r.replacement_company_name_id
    FROM dbo.user_job_during_school_job uj
    JOIN #replacements r ON uj.company_name_id = r.company_name_id
    

    【讨论】:

      【解决方案2】:

      我认为您需要显示您的光标代码,以便我们了解您在做什么。如果只是将一列替换为另一列,则 UPDATE 语句可以做到这一点

      UPDATE myTable SET
         company_name_id = replacement_company_name_id
      

      如果限制值为2525,则添加WHERE子句

      UPDATE myTable SET
         company_name_id = replacement_company_name_id
      WHERE
         company_name_id = 2525
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-05
        • 2016-02-08
        • 1970-01-01
        相关资源
        最近更新 更多