Sql 如何识别insert语句的最后一行
我想知道哪条记录是按以下顺序最后插入到明细表B中的。。。例如,如果我有: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表没有隐含的顺序。因此,您无法根据明细
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表没有隐含的顺序。因此,您无法根据明细表中的行顺序可靠地确定这一点。您需要添加某种数字列,其中包含插入行的顺序。据我所知,您正在寻找触发器,带有一些条件。 看看
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]的列?!?那没有道理!