Sql server 存储过程中的SQL输出语句

Sql server 存储过程中的SQL输出语句,sql-server,tsql,stored-procedures,output,Sql Server,Tsql,Stored Procedures,Output,请帮助我编辑以下SQL Server存储过程,以使用OUTPUT语句获取最后一个插入行的ID,以便检索它时抛出C#代码 int ID = Convert.ToInt32(insertUser.ExecuteScalar()); 存储过程代码: AS BEGIN SET NOCOUNT ON; DECLARE @ID INT INSERT INTO dbo.Registration_Table (StudentName, Email, CourseCode, Cour

请帮助我编辑以下SQL Server存储过程,以使用
OUTPUT
语句获取最后一个插入行的
ID
,以便检索它时抛出C#代码

int ID = Convert.ToInt32(insertUser.ExecuteScalar());
存储过程代码:

AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @ID INT 

    INSERT INTO dbo.Registration_Table (StudentName, Email, CourseCode, CourseTitle) 
    VALUES (@StudentName, @Email, @CourseCode, @CourseTitle)  

    SELECT 2
END
GO

您应该在此帖子中添加“Transact-SQL”标记

答案是

select SCOPE_IDENTITY()

虽然为了完整起见,我还应该提到,您可以在insert语句中使用output子句,但这只有在插入多行时才有用。

最后我做到了。若有人想通过使用OUTPUT子句的存储过程获得最后一个插入列的id,只需使用以下代码。范围_IDENTITY()在多个用户并行插入期间可能会导致错误

AS
BEGIN
    SET NOCOUNT ON;
     DECLARE @IDs TABLE(ID INT);

    INSERT INTO dbo.Registration_Table(StudentName,Email,CourseCode,CourseTitle)
  OUTPUT inserted.ID INTO @IDs(ID) 
    VALUES (@StudentName, @Email, @CourseCode, @CourseTitle)  

   SELECT ID FROM @IDs;
END
GO

过程代码(如存储过程)是高度特定于供应商的-因此请添加一个标记来指定您使用的是
mysql
postgresql
sql server
oracle
db2
,还是其他完全不同的东西。我使用的是sql和.Net,请编辑我的代码SQL是查询语言-但它只是大多数RDBMS系统-我们真的需要知道您正在使用哪个具体的RDBMS系统-Oracle?SQL Server?DB2?MySQL?PostgresQL?SQL不够清晰…我正在使用MS SQL。我需要的是获取存储过程插回的行的ID请参见:我使用的是MS SQL。我需要的是通过存储过程获取插入的行的ID。范围标识对我有用,但我希望通过OUTPUT@Mansoor:但是如果使用
SCOPE\u IDENTITY()。我需要该存储过程插入的特定行的ID如果insert语句插入多条记录,优化器可能会并行执行,在这种情况下,SCOPE_IDENTITY可能不会返回准确的最后一条记录ID。在您的语句中,只插入一条记录,并且SCOPE_IDENTITY将返回最后一个id。您是否可以引用读取该SCOPE_IDENTITY的位置可能导致多个用户出错?我从来没有遇到过任何问题。尼克,请留下这个链接