Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.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
C# 在MS SQL DB上查询标识列_C#_Sql_Sql Server_Identity - Fatal编程技术网

C# 在MS SQL DB上查询标识列

C# 在MS SQL DB上查询标识列,c#,sql,sql-server,identity,C#,Sql,Sql Server,Identity,我在MS SQL 2008中创建了一个包含一个标识列(起始值为-1,增量也为1)和4个其他列的表。我正在从C#ASP.NET访问此数据库。用于仅为非标识列推送数据。标识列将自动递增 到目前为止,我正在手动查询列值和列的剩余值。但我面临的问题是,如果其他四列的值都相等,我就得不到我想要的确切值 现在我的问题是,为什么在C#中,每当创建新记录时,我都可以获取新创建的标识列的值 谢谢。您的问题的答案实际上在于SQL Server。您可以运行: SELECT @@identity 插入后获取最后插入的

我在MS SQL 2008中创建了一个包含一个标识列(起始值为-1,增量也为1)和4个其他列的表。我正在从C#ASP.NET访问此数据库。用于仅为非标识列推送数据。标识列将自动递增

到目前为止,我正在手动查询列值和列的剩余值。但我面临的问题是,如果其他四列的值都相等,我就得不到我想要的确切值

现在我的问题是,为什么在C#中,每当创建新记录时,我都可以获取新创建的标识列的值


谢谢。

您的问题的答案实际上在于SQL Server。您可以运行:

SELECT @@identity
插入后获取最后插入的行标识

根据评论进行编辑:

考虑使用此处引用的SCOPE_IDENTITY():


您的问题的答案实际上在于SQL Server。您可以运行:

SELECT @@identity
插入后获取最后插入的行标识

根据评论进行编辑:

考虑使用此处引用的SCOPE_IDENTITY():

您可以使用

SCOPE_IDENTITY()
它将返回最近插入的行的主键值,您可以使用

SCOPE_IDENTITY()

它将返回最近插入的行的主键值(SQL),如果愿意,可以将记录输出回。但如何将其应用于C#则取决于你。例如:

INSERT INTO TABLE_A (SOMETHING, SOMETHINGELSE, RANDOMVAL3)
OUTPUT inserted.A_ID, inserted.SOMETHING, inserted.SOMETHINGELSE, inserted.RANDOMVAL3
SELECT 'ASD','DOSD', 123
但是,除非您使用的是合并,否则不能使用输出来打印从插入连接表得到的任何值。但我认为这完全是另一回事


而且,始终在应用程序和数据库之间反弹这些数据也不是一个好的做法,因此如果可能的话,我会寻找替代方法。

用SQL术语来说,如果愿意,您可以将记录输出回来。但如何将其应用于C#则取决于你。例如:

INSERT INTO TABLE_A (SOMETHING, SOMETHINGELSE, RANDOMVAL3)
OUTPUT inserted.A_ID, inserted.SOMETHING, inserted.SOMETHINGELSE, inserted.RANDOMVAL3
SELECT 'ASD','DOSD', 123
但是,除非您使用的是合并,否则不能使用输出来打印从插入连接表得到的任何值。但我认为这完全是另一回事


同时,在应用程序和数据库之间始终跳过这个数据并不是一个好的实践,所以如果可能的话,我会寻找替代方案。

您可以考虑<代码> SCONEXIONITION/COD> >代码> @标识< /代码>,并构建一个与<代码>耦合的<代码> INSERT < /COD>语句;选择SCOPE_IDENTITY()。可以这样做。假设查询体系结构正确,它不会产生显著的差异,一般来说不会,但这是一个很好的可伸缩性实践。我们每天进行数百万笔交易<代码>@@IDENTITY在该类型的环境中发生故障。永远不要使用@IDENTITY USE SCOPE\u IDENTITY()。如果再加上一个触发器和一个带有标识列的日志表,您就会遇到问题。@BrianP-如果将来有人向表中添加触发器并将其插入带有id列的表中,则与“正确的查询体系结构”无关<代码>@@IDENTITY返回会话生成的最后一个id值时,肯定会返回不正确的结果<代码> SeopeIIONION/COD>这里有正确的语义。您可以考虑<代码> SCONEXIONITION/COD> >代码> @标识< /代码>,并生成与<代码>耦合的<代码> INSERT < /COD>语句;选择SCOPE_IDENTITY()。可以这样做。假设查询体系结构正确,它不会产生显著的差异,一般来说不会,但这是一个很好的可伸缩性实践。我们每天进行数百万笔交易<代码>@@IDENTITY在该类型的环境中发生故障。永远不要使用@IDENTITY USE SCOPE\u IDENTITY()。如果再加上一个触发器和一个带有标识列的日志表,您就会遇到问题。@BrianP-如果将来有人向表中添加触发器并将其插入带有id列的表中,则与“正确的查询体系结构”无关<代码>@@IDENTITY返回会话生成的最后一个id值时,肯定会返回不正确的结果
SCOPE\u IDENTITY
在这里有正确的语义。嗨,卡恩,你能帮我做一些示例查询吗。。提前感谢Hi Kahn,你能帮我提供一些示例查询吗。。提前谢谢