0

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

示例:我有下表(tableA)

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

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

任何人都知道我怎么能在 mssql 中做到这一点?

4

5 回答 5

2

假设 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
;

tableB对我来说,根据更新插入到tableAtableA响应插入到更新更自然tableB

于 2013-09-16T05:48:22.850 回答
1

我会为tableB写一个触发器。在那里插入一行后,触发器可以更新 tableA 中的特定值

于 2013-09-16T05:43:49.093 回答
0
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
于 2013-09-16T06:22:43.270 回答
0

向 TABLEB 插入数据时,应直接添加更新字段 is_feeded。

于 2013-09-16T05:47:09.623 回答
0

首先将数据从tableA复制到tableB

INSERT INTO tableB
  SELECT Name, id FROM tableA;

然后 set 被喂食:

UPDATE tableA SET is_feeded = true

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

于 2013-09-16T05:44:51.347 回答