选择刚插入的行。

15

我该如何检索刚插入的行?

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行。
提前感谢。
Stev
PS:也许我需要使用存储过程?
3个回答

32

我不完全确定你想要什么......但是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 子句!更多信息请阅读Books Online上关于 OUTPUT 子句的内容


3

如果您正在使用 SQL Server

并且您知道有多少行被插入,请按照以下步骤进行

SELECT top 2 * FROM LETTRE_VOIT order by primaryKeyId desc

将插入的行数放置在2的位置上。如果您知道插入的行数,可以使用top关键字提供这些数字来帮助您。

不错的想法,问题是我不知道插入了多少行。这意味着我必须执行以下SQL语句:1. 插入并返回插入了多少行 2. SELECT TOP - user609511
然后,浏览一下@coconut的答案。 - subodh
除非您确切知道要插入多少行(无法在TOP中使用变量),否则这将无法工作。 - rainabba
1
这不是一个好主意。在大多数情况下可能有效,但不能保证返回的行与插入的行相同。 - Maxx

2

在插入记录之前,将其保存在变量中,或添加日期字段,并按日期检索它们如何?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接