我在MS SQL 2008中创建了一个表,其中包含一个标识列(Start Value - 1和Increment也是1)和另外4列。我从C#ASP.NET访问此数据库。用于仅为非标识列推送数据。标识列将自动递增。
截至目前,我手动查询列值,其余为列。但是,如果所有其他四列值相等,我面临问题我没有得到我正在寻找的确切值
现在我的查询是,在C#中有什么原因可以在每次创建新记录时获取新创建的标识列的值。
感谢。
答案 0 :(得分:2)
您的问题的答案实际上在于SQL Server。你可以运行:
SELECT @@identity
插入后的以获取最后插入的行标识。
http://technet.microsoft.com/en-us/library/aa933167(v=sql.80).aspx
基于评论的编辑:
考虑使用此处引用的SCOPE_IDENTITY():
http://technet.microsoft.com/en-us/library/aa259185(v=sql.80).aspx
答案 1 :(得分:2)
您可以使用
SCOPE_IDENTITY()
将返回最近插入的行的主键值
答案 2 :(得分:0)
在SQL术语中,您可以根据需要输出记录。但是你如何将它应用于C#取决于你。例如:
INSERT INTO TABLE_A (SOMETHING, SOMETHINGELSE, RANDOMVAL3)
OUTPUT inserted.A_ID, inserted.SOMETHING, inserted.SOMETHINGELSE, inserted.RANDOMVAL3
SELECT 'ASD','DOSD', 123
但除非您使用合并,否则不能使用OUTPUT打印来自INSERT的连接表中的任何值。但我认为这完全是另一回事。
此外,在应用程序和数据库之间随时反弹这些数据并不是一个好习惯,所以如果可能的话,我会寻找替代方案。