将这些记录插入 mssql 中的另一个表后,如何通过循环逐行更新数据



>有谁知道将这些记录插入 mssql 中的另一个表后如何通过循环逐行更新数据?

例:我有下表(表A)

ID    Name    is_Feeded
1     Alvin   0
2     Ben     0
3     Lee     1
4     David   0

我想将这些表从表 A 插入到表 B,然后通过循环将表 A 中的列is_Feeded更新为 1?

有人知道我如何在 mssql 中做到这一点吗?

假设 SQL Server 2005 或更高版本,您可以在单个语句中执行此操作。

UPDATE A
OUTPUT
   inserted.ID,
   inserted.Name
INTO
   dbo.TableB (ID, Name)
SET
   A.is_Feeded = 1 -- is fed?
FROM
   dbo.tableA A
WHERE
   A.is_Feeded = 0
;

触发器也是可能的,但如果可以避免,我不建议使用触发器。如果必须使用触发器(例如,可能无法控制对tableA的更新),则:

CREATE TRIGGER TableA_U ON dbo.TableA FOR UPDATE
AS
INSERT dbo.tableB (ID, Name)
SELECT
   I.ID,
   I.Name
FROM
   inserted I
;

对我来说,根据对tableA的更新插入tableB比更新tableA以响应插入tableB更自然。

我会为tableB编写一个触发器。在其中插入一行后,触发器可以更新表 A 中的特定值

首先将数据从表 A 复制到表 B

INSERT INTO tableB
  SELECT Name, id FROM tableA;

然后设置被馈送:

UPDATE tableA SET is_feeded = true

最后,您应该在一个事务中执行此操作(语法取决于您的数据库系统,例如MySQL:http://dev.mysql.com/doc/refman/5.0/en/commit.html)

在将数据

插入 TABLEB 时,您应该直接添加更新字段is_feeded。

CREATE PROCEDURE xxxxx
AS 
    BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
        SET NOCOUNT ON ;
        DECLARE @iOK INT ;
        SET @iOK = 0 ;
        BEGIN TRY
            BEGIN TRANSACTION    -- Start the transaction

        --start Inserting --
            INSERT  INTO tableB
                    SELECT  Name ,
                            id
                    FROM    tableA ;
            UPDATE  tableA
            SET     is_feeded = true    
        -- If we reach here, success!
            COMMIT
            SET @iOK = 1 ;
        END TRY
        BEGIN CATCH
        -- Whoops, there was an error
            IF @@TRANCOUNT > 0 
                ROLLBACK
        -- Raise an error with the details of the exception
            DECLARE @ErrMsg NVARCHAR(4000) ,
                @ErrSeverity INT
            SELECT  @ErrMsg = ERROR_MESSAGE() ,
                    @ErrSeverity = ERROR_SEVERITY()
            RAISERROR(@ErrMsg, @ErrSeverity, 1)
        END CATCH
        SELECT  @iOK ;
    END

最新更新