Sql server 存储过程中的SQL输出语句
请帮助我编辑以下SQL Server存储过程,以使用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
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的位置可能导致多个用户出错?我从来没有遇到过任何问题。尼克,请留下这个链接