Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何识别insert语句的最后一行_Sql_Sql Server_Tsql_Sql Server 2000 - Fatal编程技术网

Sql 如何识别insert语句的最后一行

Sql 如何识别insert语句的最后一行,sql,sql-server,tsql,sql-server-2000,Sql,Sql Server,Tsql,Sql Server 2000,我想知道哪条记录是按以下顺序最后插入到明细表B中的。。。例如,如果我有: 1 row Header Table A -------------------- 1 row Detail Table B 2 row Detail Table B 3 row Detail Table B 4 row Detail Table B (last) 如果插入4行,我想执行一些T-SQL或运行一个过程。。。提前谢谢 根据定义,使用SQL Server 2000时,SQL表没有隐含的顺序。因此,您无法根据明细

我想知道哪条记录是按以下顺序最后插入到明细表B中的。。。例如,如果我有:

1 row Header Table A
--------------------
1 row Detail Table B
2 row Detail Table B
3 row Detail Table B
4 row Detail Table B (last)
如果插入4行,我想执行一些T-SQL或运行一个过程。。。提前谢谢


根据定义,使用SQL Server 2000时,SQL表没有隐含的顺序。因此,您无法根据明细表中的行顺序可靠地确定这一点。您需要添加某种数字列,其中包含插入行的顺序。

据我所知,您正在寻找触发器,带有一些条件。

看看


该表是否有标识列(例如,“TableBId”)?这是Randy Minder在回答中提到的数字栏。如果确实如此,则只需使用ORDER BY函数即可:

SELECT TOP 1 * FROM TableB ORDER BY Id DESC
如果没有标识列,则可以通过创建新列(Id)、将其设置为主键并启用其标识规范来添加标识列

如果要在将新项插入表后运行一些sql,可以使用insert触发器


可以阅读或查看下面的astander链接:)

查看上面建议的有关触发器的帮助,然后可能查看触发器创建和使用的特殊插入和删除表

触发器语句中使用了两个特殊的表:删除表和插入表。Microsoft®SQL Server会自动创建和管理这些表。您可以使用这些临时的内存驻留表来测试某些数据修改的效果,并为触发操作设置条件;但是,不能直接更改表中的数据

我相信,通过触发器插入或删除的每一行都是通过这些表完成的


在执行insert时,您可能会查询insert表以查找最后一行。

使用标识确定最后插入的记录可能会产生误导。如果某些记录已被删除,并且您已重置标识开始值,该怎么办

例如,您可能有1-10000条记录,但从1000-9000条中删除,然后您决定重新设置您的标识,以从1000开始

另一方面,触发器可能会起作用,但你需要仔细权衡后果。这可能会给您的系统增加很多负载

你是如何插入这些记录的?通过申请

我建议您添加一个timestamp列(甚至是一个具有默认值GETDATE()的常规DATETIME列)。这有助于确定事务中最后插入的记录。例如:

-- begin your transaction 

-- insert statements here 

SELECT id
FROM TableB
WHERE timestampcol = (SELECT MAX(timestampcol) FROM TableB)

-- run your sproc based on the last record inserted

-- commit or rollback your transaction

您可能希望将示例的格式设置得更好一些。这是很难理解的。代码块可能会有帮助。需要更清楚的解释。为什么有名为[1]、[row]、[Header]、[Table]和[a]的列?!?那没有道理!