2017-08-27 171 views
-1

請幫我編輯以下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 **不夠清晰... –

回答

1

您應該爲此帖添加一個'Transact-SQL'標記。

答案是

select SCOPE_IDENTITY() 

雖然完整性,我還要提到的是,你可以使用輸出子句中的INSERT語句,但是如果你插入多行,將IMO纔有用處。

+0

我正在使用MS SQL。我需要的是獲取存儲過程插回的行的ID。範圍身份爲我工作,但我想通過OUTPUT – Mansoor

+1

@Mansoor得到結果:但如果這種方法與'SCOPE_IDENTITY()'工作 - 爲什麼你堅持使用'OUTPUT'? –

+0

SCOPE_IDENTITY()可能在讀取時發生錯誤。我需要該存儲過程插入的特定行的ID – Mansoor

0

最後我做到了。如果任何人想通過使用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開始,這一切都很好 –