Sql server 使用MS SQL处理记录后更新记录

Sql server 使用MS SQL处理记录后更新记录,sql-server,Sql Server,我正在从具有IsMatch列的表中插入记录。我已经写了一个insert语句,但我遇到了一个小问题 我的insert记录仅从IsMatch=2的表中选择前1个 我需要在插入记录后更新该记录,以便IsMatch=3,从而不会再次选择该记录 代码如下: begin tran INSERT INTO [Contact]( [Company] , [Contact] , [Title] , [MailingAddress] , [MailingCity] , [MailingState]

我正在从具有IsMatch列的表中插入记录。我已经写了一个insert语句,但我遇到了一个小问题

我的insert记录仅从IsMatch=2的表中选择前1个

我需要在插入记录后更新该记录,以便IsMatch=3,从而不会再次选择该记录

代码如下:

begin tran

INSERT INTO [Contact](
 [Company]
 , [Contact]
 , [Title]
 , [MailingAddress]
 , [MailingCity]
 , [MailingState]
 , [MailingZip]
 , [ShippingAddress]
 , [ShippingCity]
 , [ShippingState]
 , [ShippingZip]
 , [Phone]
 , [SIC]
 , [EmpSize]
 , [LockedBy]
 , [LastUpdated]
 , [Source]
 , [CreateDate]
 , [ContactCategory]
 , [ContactGroup]
 , FirstName
 , LastName
 , Mar
 , website
)
SELECT top 1 
   company
   , firstname+ ' ' + lastName as contact
   , contactTitle as title
   , address as mailingaddress
   , city as mailingcity
   , state as mailingstate
   , zip as mailingzip
   , locationaddress as shippingaddress
   , locationcity as shippingcity
   , locationstate as shippingstate
   , locationzip as shippingzip
   , phone
   , primarysic as sic
   , employeeSizeRange as empsize
   , 0 as lockedby
   , '2015-01-19' as lastUpdated
   , 'InfoUSA20141231' as source
   , getdate() as createdate
   , 'Cellular Telephones-Service & Repair' as contactCategory
   , 'InfoUsa' as ContactGroup
   , lastName
   , firstname
   , 'PB-NewWireless' as Mar
   , website
FROM  tmp_WirelessRepairListDec2014 
WHERE isMatch = 2

UPDATE tmp_WirelessRepairListDec2014 
SET    isMatch = 3 
WHERE  id in (
       SELECT top 1 id 
       FROM   tmp_WirelessRepairListDec2014 
       WHERE isMatch = 2
)

commit tran
试试这个

DECLARE @tempTable as TABLE 
( 
    pkid bigint null
)

INSERT INTO TABLENAME
(
    COL1,
    COL2,
    COL3
)

OUTPUT INSERTED.pkid
INTO @tempTable 
SELECT COL1,COL2,COL3
FROM TABLENAME_2
现在,您可以使用@testable中的PKID值来更新记录


SELECT*FROM@tentable

您能否发布
INSERT
查询以及一些您遇到问题的示例数据?在插入过程中更改值?您没有在此处为任何人提供任何类型的详细信息,以使他们有更多的事情要做。如果您将相同的ORDER BY子句添加到insert和update中,它看起来应该可以工作。不要使用
选择TOP 1
。如果多个线程同时执行该代码,则可能会更新错误的记录。相反,使用类似于中提到的方法,如果它是您刚才插入的同一条记录,有没有理由不能在插入中插入硬编码的“3”?(顺便说一句,如果格式化是一个问题,你不必包含整个语句。只需包含关键字段,即足以给出你所做工作的要点。)