Sql 在最后一个插入操作中捕获多行,并在不使用触发器的情况下从中选择?

Sql 在最后一个插入操作中捕获多行,并在不使用触发器的情况下从中选择?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有以下行动: declare @appName varchar(35), @modName varchar(125), @cnt int; select @cnt=0; BEGIN TRY insert into dbo.AppsMonitor ( AppName, AppLoadTime, AppLastUpdate, ModName, ModLoadTime, ModLastUpdate , ModErrMsg ) SELECT _S

我有以下行动:

declare @appName varchar(35), @modName varchar(125), @cnt int;
select @cnt=0;
BEGIN TRY
    insert into dbo.AppsMonitor (
        AppName, AppLoadTime, AppLastUpdate, ModName, ModLoadTime, ModLastUpdate , ModErrMsg
    )
    SELECT
        _Scanner.value('@scannerName'   ,   'varchar(25)') AS scannerName
        , _Scanner.value('@StartAt' ,   'varchar(22)') AS LoadTime
        , _Scanner.value('@LastUpdate'  ,   'varchar(22)') AS LastUpdate

        , _Module.value('@modName'  ,   'varchar(125)') AS ModName
        , _Module.value('@StartAt'  ,   'varchar(22)') AS LoadTime
        , _Module.value('@LastUpdate'   ,   'varchar(22)') AS LastUpdate

        , _Module.value('ErrMsg[1]' ,   'varchar(500)') AS ErrMsg
    FROM @xml.nodes('/AllMyScanners/Scanners/Scanner') 
                        As AllMyScanners(_Scanner)  
    CROSS APPLY _Scanner.nodes('Modules/Module') 
                        AS Modules(_Module)
    select @cnt=@@ROWCOUNT
END TRY
BEGIN CATCH
    set @rr=-2;
    print 'Err#4'
END CATCH
我想从插入的缓冲区(类似于@inserted)中选择一些字段,这些字段是我为了分析目的刚刚插入到表dbo.AppsMonitor中的


如何在不使用触发器的情况下做到这一点?我的团队不允许触发

您可以使用一个。使用插入的
输出。xxx

谢谢您的回答。为了让其他读者更清楚地了解这一点,我使用OUTPUT for INSERTED的代码是

BEGIN TRY
    insert into dbo.AppsMonitor (
        AppName, AppLoadTime, AppLastUpdate, ModName, ModLoadTime, ModLastUpdate , ModErrMsg
    )
    OUTPUT INSERTED.AppName, INSERTED.ModName into @tmpVar 
    SELECT
        _Scanner.value('@scannerName'   ,   'varchar(25)') AS scannerName
        , _Scanner.value('@StartAt' ,   'varchar(22)') AS LoadTime
        , _Scanner.value('@LastUpdate'  ,   'varchar(22)') AS LastUpdate

        , _Module.value('@modName'  ,   'varchar(125)') AS ModName
        , _Module.value('@StartAt'  ,   'varchar(22)') AS LoadTime
        , _Module.value('@LastUpdate'   ,   'varchar(22)') AS LastUpdate

        , _Module.value('ErrMsg[1]' ,   'varchar(500)') AS ErrMsg
    FROM @xml.nodes('/AllMyScanners/Scanners/Scanner') 
                        As AllMyScanners(_Scanner)  
    CROSS APPLY _Scanner.nodes('Modules/Module') 
                        AS Modules(_Module)
    select @cnt=@@ROWCOUNT

END TRY
BEGIN CATCH
    set @rr=-2;
    print 'Err#4'
END CATCH

这对我来说有点棘手。语法有点奇怪。