Sql server 在获取行T-SQL时提交临时表(SqlServer2005)

Sql server 在获取行T-SQL时提交临时表(SqlServer2005),sql-server,Sql Server,我在“While..fetch next”期间更新临时表 问题是,当光标获取下一行时,临时表没有使用之前的获取下一行进行更新,因此在临时表的末尾,临时表将使用最后一行的数据而不是每一行的数据进行更新。 我英语说得不好,希望你能理解我的要求 DECLARE @IdType UNIQUEIDENTIFIER DECLARE @SerialNumber NVARCHAR(64) DECLARE DeviceCursor CURSOR LOCAL FOR SELECT DISTI

我在“While..fetch next”期间更新临时表 问题是,当光标获取下一行时,临时表没有使用之前的获取下一行进行更新,因此在临时表的末尾,临时表将使用最后一行的数据而不是每一行的数据进行更新。 我英语说得不好,希望你能理解我的要求

        DECLARE @IdType UNIQUEIDENTIFIER
DECLARE @SerialNumber NVARCHAR(64)
DECLARE DeviceCursor CURSOR LOCAL FOR
    SELECT DISTINCT 
        --Acc.[AccountHierarchyId],
        MC.SerialNumber  AS SerialNumber,
        MC.IdType AS IdType
    FROM 
        @MachinesContrat MC
    WHERE
        MC.TypeAffaire = 'Essentiel'

OPEN DeviceCursor
FETCH NEXT FROM DeviceCursor INTO @SerialNumber, @IdType
WHILE @@FETCH_STATUS = 0
BEGIN

        UPDATE 
            MI SET MI.SerialNumber = @SerialNumber
        FROM 
            @MachinesInventory MI
        WHERE
            MI.fk_IdType = @IdType AND isnull(MI.SerialNumber,'Dummy') <> @SerialNumber

    FETCH NEXT FROM DeviceCursor    INTO @SerialNumber, @IdType
END
CLOSE DeviceCursor;  
DEALLOCATE DeviceCursor;
DECLARE@IdType UNIQUEIDENTIFIER
声明@SerialNumber NVARCHAR(64)
将DeviceUrsor游标声明为本地
选择不同的
--Acc.[AccountHierarchyId],
MC.SerialNumber作为SerialNumber,
MC.IdType作为IdType
从…起
@机械控制
哪里
MC.typeafaire='Essentiel'
开放式设备接收器
从DeviceCursor获取下一个到@SerialNumber,@IdType
而@@FETCH\u STATUS=0
开始
更新
MI SET MI.SerialNumber=@SerialNumber
从…起
@机械库存
哪里
MI.fk_IdType=@IdType和isnull(MI.SerialNumber,'Dummy')@SerialNumber
从DeviceCursor获取下一个到@SerialNumber,@IdType
结束
闭合装置接受器;
解除分配DeviceUrsor;

您不需要光标来完成这项工作。update语句中的一个简单连接就可以做到这一点,而且性能会更好。

您不需要光标来完成这项工作。update语句中的一个简单联接可以做到这一点,而且性能会更好。

是否可以添加显示更新前后表内容的示例数据。是否还可以添加更新后希望表包含的内容?是否可以添加显示更新前后表内容的示例数据。您还可以添加希望表包含更新后内容的内容吗?