SQL输出语句

问题描述:

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

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 
+1

程序代码(如存储过程)并行插入是**高度供应商特定期间导致错误** - 所以请添加标签到指定是你使用MySQL的' ','postgresql','sql-server','oracle'或'db2' - 或者其他的东西。 –

+0

我正在使用SQL和.Net,请编辑我的代码 – Mansoor

+2

** SQL **是查询语言 - 但它只是**最** ** RDBMS系统 - 我们真的需要知道哪些** CONCRETE ** RDBMS系统你正在使用 - 甲骨文? SQL Server? DB2? MySQL的? PostgreSQL的? ** SQL **不够清晰... –

您应该为此帖添加一个'Transact-SQL'标记。

答案是

select SCOPE_IDENTITY() 

虽然完整性,我还要提到的是,你可以使用输出子句中的INSERT语句,但是如果你插入多行,将IMO才有用处。

+0

我正在使用MS SQL。我需要的是获取存储过程插回的行的ID。范围身份为我工作,但我想通过OUTPUT – Mansoor

+1

@Mansoor得到结果:但如果这种方法与'SCOPE_IDENTITY()'工作 - 为什么你坚持使用'OUTPUT'? –

+0

SCOPE_IDENTITY()可能在读取时发生错误。我需要该存储过程插入的特定行的ID – Mansoor

最后我做到了。如果任何人想通过使用OUTPUT子句的存储过程来使用最后一次插入列的id,请使用以下代码。 SCOPE_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 
+0

您可以参考您在哪里阅读SCOPE_IDENTITY可能会导致多个用户发生错误?我从来没有任何问题。 –

+0

尼克,请点击此链接https://support.microsoft.com/en-in/help/2019779/you-may-receive-incorrect-values-when-using-scope-identity-and-identit – Mansoor

+0

谢谢发布。所以从SQL 2012开始,这一切都很好 –