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
这对我来说有点棘手。语法有点奇怪。