SQL获取插入行的行号
我想获取插入记录的行号,以便我可以将它用于select语句。我试图完成的是将一个人插入到一个表中,获取该行号,然后从行号匹配的另一个表中选择一些内容。以下是我走到这一步:SQL获取插入行的行号
INSERT INTO TableA Values (‘Person’)
Select timeToken
From
(
Select
Row_Number() Over (Order By tokenOrder) As RowNum
, *
From TableB WHERE taken = false
) t2
Where RowNum = (Row Number of Inserted Item)
我如何插入项的行号,我想作为一些记录可能已被删除,这样他们就不会匹配比较IDS。
TABLEA Data (primary key is id)
id name
3 John
12 Steve
TABLEB Data (primary key is id)
id timeToken tokenOrder taken
2 1:00am 1 false
3 2:00am 2 false
5 3:00am 3 true
6 4:00am 4 false
我的期望导致当我插入的人,选择采取将返回凌晨4:00
我在存储过程中这样做。
- 除非包含
ORDER BY
子句,否则认为行具有数字是错误的。 - 在插入行后查找行的唯一方法是搜索它。推测你的桌子有一个主键;用它来搜索它。
是的,我的主键像一个id,在删除记录的情况下我该怎么办,TableA主键列可以在51或3开始,并且不会匹配TableB的tokenOrder。 – user979331
通过你试图做的声音像以下链接上列出的东西[链接](http://stackoverflow.com/questions/7917695/sql-server-return-value-after-insert) 基本上: 'INSERT INTO TableA(Person) OUTPUT插入.ID VALUES('bob');' – David
@David我已经看到了,但在timeToken为false的情况下我该怎么办?例如凌晨3点被采取,所以如果即使我重新启动主键完成后,ID不会匹配tokenOrder我试图得到 – user979331
通过它你试图做这样的事情是什么上市thhe以下链接LINK的声音 - SQL Server - Return value after INSERT
基本上是:
INSERT INTO TableA (Person)
OUTPUT Inserted.ID
VALUES('bob');
我已经看到了,但在timeToken为false的情况下我该怎么办?例如凌晨3点被采取,所以如果即使我重新启动主键完成后,ID不会匹配tokenOrder我想获得 – user979331
试试这个。它可以帮助你
Declare @TableA_PK BIGINT
INSERT INTO TableA Values ('Person')
SET @TableA_PK=SCOPE_IDENTITY()
Select timeToken
From
(
Select
Row_Number() Over (Order By tokenOrder) As RowNum
, *
From TableB WHERE taken = false
) t2
Where RowNum [email protected]_PK
SCOPE_IDENTITY():范围身份将捕获最后插入的记录的主键值和其可以被存储在varaible和 ,然后它可以用于进一步的重新使用
但我的ids可能不是1,2,3,4,5,6它可能是像这样5,6,7,9,11,14,17 – user979331
你的表coulmn没有'IDENTITY' .. ??表A中的 –
timeToken?否 – user979331
添加外键约束(引用在表的主键)的表b会很好,因为如果不从表B删除记录,就不能从表B中删除记录,这有助于使用标识比较记录。
我可以看到@ Coder1991的示例 – user979331
@ user979331使用alter语句在表b中添加列id1,如下所示。 alter table table b add id1 int null。添加外键约束,如下所示。 atler table table b添加约束fk_tbl_b外键(id1)引用表A(id) – Coder1991
我可以从任何一个或表B中删除,timeTokens可以标记为已采用,然后我不想包含它们。 – user979331
试试这个
declare @rowNum int;
INSERT INTO TableA Values ('Person')
SET @rowNum =SCOPE_IDENTITY()
select * from TableA where id = @rowNum
你有''TableA'列rownum'? –
呃......我想你可能会对SQL Server如何存储数据有些困惑。行本身并不具有“行号”。 – ZLK
否我在表A中没有rownum列 – user979331