选择插入表格的最后记录

时间:2014-05-21 12:46:52

标签: c# asp.net sql ado.net

我在table1中插入了4条记录,然后是5条记录,然后是3条记录。 现在我想获取最后3条记录或说出任意数量的记录,但最后插入。我将如何获得这些?

实际情况是,在gridview 1中,用户将通过复选框字段的帮助选择说3条记录,然后将这3条记录插入到table1中,然后存储过程将选择最后插入的3条reocrds并将其分配给RDLC报告。所有事情都已完成但只是不知道如何选择最后插入任意数量的记录。

3 个答案:

答案 0 :(得分:1)

根据定义,表是一组无序行。除非您在与插入相同的批处理中执行此操作,否则无法向SQL Server询问最后插入的行。例如,如果您的表具有IDENTITY列,则可以说:

INSERT dbo.table(列)值(...) SELECT SCOPE_IDENTITY();

但是这也会给你最后一个身份列。

你可以在这里做的是你可以借助时间戳并在表格的单独一栏中定义它。

ALTER TABLE dbo.table ADD DateInserted DEFAULT CURRENT_TIMESTAMP;

使用@lastrows计数定义存储过程,该计数将存储在要调用的服务层中。

CREATE PROC sp_GetLastInsertedRows(@lastrows int) AS

; WITH x AS(SELECT *,r = ROW_NUMBER()OVER(ORDER BY DateInserted DESC)    来自dbo.table) SELECT * FROM x WHERE r< = N;

这样就可以获得最后一次交易中插入的最后N行数。

答案 1 :(得分:0)

您可以使用以下的分期付款查询

 SELECT column_name FROM table_name
ORDER BY column_name DESC
LIMIT 3;

答案 2 :(得分:0)

好的,所以你需要更灵活的东西。现在您可能只有一个用户,现在您可能在执行INSERT语句后立即运行报告,但您真正需要知道的是自上次查看以来哪些行是新的。

这样做的一个好方法是在行中添加DATETIME NULL字段;我们称之为processed_date。此字段将由存储过程更新,以便为报告选择它们。像这样:

SELECT * FROM tbl1
INTO #report_tbl
WHERE processed_date IS NULL

UPDATE tbl1
SET processed_date = GETDATE()
WHERE id_field IN (
    SELECT id_field
    FROM #report_tbl
)

现在你肯定会选择“尚未查看过的行”。