ฉันมีความต้องการเดียวกันและพบคำตอบนี้ ..
สิ่งนี้จะสร้างเร็กคอร์ดในตาราง บริษัท (คอมพ์) มันจะคว้า auto ID ที่สร้างขึ้นในตาราง บริษัท และวางลงในตารางพนักงาน (พนักงาน) เพื่อให้สามารถเชื่อมโยงตาราง 2 ตารางพนักงานหลายคนกับหนึ่ง บริษัท มันใช้งานได้กับ SQL 2008 DB ของฉันควรทำงานกับ SQL 2005 ขึ้นไป
===========================
CREATE PROCEDURE [dbo].[InsertNewCompanyAndStaffDetails]
@comp_name varchar(55) = 'Big Company',
@comp_regno nchar(8) = '12345678',
@comp_email nvarchar(50) = 'no1@home.com',
@recID INT OUTPUT
- ' @recID'ใช้เพื่อเก็บหมายเลขประจำตัวที่สร้างขึ้นโดยอัตโนมัติของ บริษัท ที่เรากำลังจะคว้า
AS
Begin
SET NOCOUNT ON
DECLARE @tableVar TABLE (tempID INT)
- บรรทัดด้านบนใช้สำหรับสร้างตาราง tempory เพื่อเก็บหมายเลข ID ที่สร้างขึ้นอัตโนมัติเพื่อใช้ในภายหลัง มันจะมีเพียงหนึ่งฟิลด์ 'tempID และประเภทของINTเป็นเช่นเดียวกับ'@recID'
INSERT INTO comp(comp_name, comp_regno, comp_email)
OUTPUT inserted.comp_id INTO @tableVar
- ใส่ 'เอาท์พุท ' 'บรรทัดด้านบนใช้เพื่อดึงข้อมูลออกจากเขตข้อมูลใด ๆ ในระเบียนที่สร้างขึ้นในขณะนี้ ข้อมูลนี้เราต้องการคือหมายเลขประจำตัวประชาชน เพื่อให้แน่ใจว่ามันบอกว่าชื่อฟิลด์ที่ถูกต้องสำหรับตารางของคุณฉันเป็น'comp_id' สิ่งนี้จะถูกดร็อปลงในตาราง tempory ที่เราสร้างไว้ก่อนหน้านี้
VALUES (@comp_name, @comp_regno, @comp_email)
SET @recID = (SELECT tempID FROM @tableVar)
- บรรทัดด้านบนใช้เพื่อค้นหาตาราง tempory ที่เราสร้างขึ้นก่อนหน้านี้ซึ่ง ID ที่เราต้องการจะถูกบันทึกไว้ เนื่องจากมีเพียงหนึ่งระเบียนในตาราง tempory นี้และมีเพียงหนึ่งฟิลด์เท่านั้นจึงจะเลือกหมายเลข ID ที่คุณต้องการและวางลงใน ' @recID ' ' @recID ' ตอนนี้มีหมายเลข ID ที่คุณต้องการและคุณสามารถใช้วิธีที่คุณต้องการเช่นฉันได้ใช้มันด้านล่าง
INSERT INTO staff(Staff_comp_id)
VALUES (@recID)
End
- แล้วคุณไป คุณสามารถคว้าสิ่งที่คุณต้องการได้ในบรรทัด'OUTPUT ที่แทรกไว้ WhatEverFieldNameYouWant'และสร้างฟิลด์ใดที่คุณต้องการในตาราง tempory ของคุณและเข้าถึงมันเพื่อใช้ตามที่คุณต้องการ
ฉันกำลังมองหาบางอย่างเช่นนี้มานานแล้วโดยมีการแบ่งรายละเอียดนี้ฉันหวังว่านี่จะช่วยได้
OUTPUT INSERTED.ID
สามารถสร้างปัญหาในกรณีที่ทริกเกอร์ที่ใช้งานอยู่บนโต๊ะ