2011-12-01 362 views
9

如何檢索剛插入的行?選擇剛剛插入的行

INSERT INTO LETTRE_VOIT 
select rsVoit.NOID, NO_ORDRE, rsOrdre.CODE_DEST, rsOrdre.MODAL_MODE, rsOrdre.MODAL_PORT, 
CASE rsOrdre.MODAL_PORT 
      WHEN 'false' THEN 'D' 
      ELSE 'P' 
     END, 
rsOrdre.LIVRS_EXPRS, 
CASE rsOrdre.LIVRS_EXPRS 
      WHEN 'false' THEN 'L' 
      ELSE 'E' 
     END, 
    rsOrdre.ENLEV_UNITE, LIBELLE, NBR_COLIS,POID,ENLEV_CREMB,ENLEV_DECL 
from ORDRE rsOrdre 
inner join 
(
    select CODE_DEST,MODAL_MODE, MODAL_PORT, LIVRS_EXPRS,ENLEV_UNITE, ROW_NUMBER() over (order by CODE_DEST) as NOID 
    from ORDRE 
    group by CODE_DEST,MODAL_MODE,MODAL_PORT,LIVRS_EXPRS,ENLEV_UNITE 
) rsVoit on rsVoit.CODE_DEST = rsOrdre.CODE_DEST and rsVoit.MODAL_MODE = rsOrdre.MODAL_MODE 
and rsVoit.MODAL_PORT = rsOrdre.MODAL_PORT and rsVoit.LIVRS_EXPRS = rsOrdre.LIVRS_EXPRS 
and rsVoit.ENLEV_UNITE = rsOrdre.ENLEV_UNITE 

LEFT JOIN T_UNITE ON rsOrdre.ENLEV_UNITE = T_UNITE.NOID 
WHERE (STATUT_ORDRE = 3) AND IS_PRINT = 'false' AND (TRANSPORTEUR IN (SELECT ParsedString From dbo.ParseStringList(@Trans))) 
order by rsVoit.NOID, NO_ORDRE 

SELECT * FROM LETTRE_VOIT WHERE ??? 

例如:

我插入2,它返回2

,然後我插入3,我想返回的3而不是5行。

在此先感謝。

甜菊

PS:可能是我需要使用存儲過程?

+2

這RDBMS? ..... –

+0

SQL Server 2008 – user609511

回答

16

我不是100%肯定,你想要什麼回來....但SQL Server有一個OUTPUT條款,其輸出的東西從INSERTUPDATEDELETE聲明:

INSERT INTO dbo.YourTable(col1, col2, ..., colN) 
OUTPUT Inserted.Col1, Inserted.IDCol, Inserted.Col17 
VALUES(val1, val2, ...., valN) 

在這裏,你」重新插入IDCol(例如INT IDENTITY列),Col1Col17的值和插入值。

如果只是在Mgmt Studio中將結果返回到您的網格中就足夠了 - 然後使用OUTPUT子句!更多about the OUTPUT clause on Books Online

+1

感謝,這是exacly我想要的。 – user609511

2

如何在插入或添加日期字段並按日期檢索日誌前將變量中的記錄保存在變量中?

+0

不壞IDEE,我會考慮它 – user609511

0

如果您正在使用SQL Server

而且你知道有多少行插入,然後經過

SELECT top 2 * FROM LETTRE_VOIT order by primaryKeyId desc 

把在地方的2插入的行數。

它可能會幫助你,如果你知道插入的行數,然後你可以提供的數字與頂級關鍵字

+0

不錯idee,這個問題我不知道插了多少行。這意味着我有使SQL:1.插入並返回多少行插入2. SELECT TOP – user609511

+0

然後通過,@coconut回答 – subodh

+0

這不會工作,除非你確切地知道你插入多少行(可以'在TOP中使用變量)。 – rainabba