มีวิธี "ง่ายๆ" ในการทำเช่นนี้หรือไม่หรือฉันต้องส่งผ่านตัวแปรตารางด้วยไวยากรณ์ "OUTPUT ... INTO"
DECLARE @someInt int
INSERT INTO MyTable2(AIntColumn)
OUTPUT @SomeInt = Inserted.AIntColumn
VALUES(12)
มีวิธี "ง่ายๆ" ในการทำเช่นนี้หรือไม่หรือฉันต้องส่งผ่านตัวแปรตารางด้วยไวยากรณ์ "OUTPUT ... INTO"
DECLARE @someInt int
INSERT INTO MyTable2(AIntColumn)
OUTPUT @SomeInt = Inserted.AIntColumn
VALUES(12)
คำตอบ:
คุณต้องมีตัวแปรตารางและมันอาจจะง่ายขนาดนี้
declare @ID table (ID int)
insert into MyTable2(ID)
output inserted.ID into @ID
values (1)
output
?
DECLARE @InsertedIDResults TABLE (ID int); INSERT INTO MyTable (Name, Age) OUTPUT INSERTED.ID INTO @InsertedIDResults VALUES('My Name', 30); DECLARE @InsertedID int = (SELECT TOP 1 ID FROM @InsertedIDResults);
ในอีกหนึ่งปีต่อมา ... หากสิ่งที่คุณต้องการคือรับรหัสที่สร้างขึ้นโดยอัตโนมัติของตารางคุณก็ทำได้
SELECT @ReportOptionId = SCOPE_IDENTITY()
มิฉะนั้นดูเหมือนว่าคุณจะติดอยู่กับการใช้โต๊ะ
ในภายหลัง แต่ก็ยังควรกล่าวถึงคือคุณยังสามารถใช้ตัวแปรเพื่อส่งออกค่าใน SET clause ของ UPDATE หรือในฟิลด์ของ SELECT
DECLARE @val1 int;
DECLARE @val2 int;
UPDATE [dbo].[PortalCounters_TEST]
SET @val1 = NextNum, @val2 = NextNum = NextNum + 1
WHERE [Condition] = 'unique value'
SELECT @val1, @val2
ในตัวอย่างด้านบน @ val1 มีค่า before และ @ val2 มีค่า after แม้ว่าฉันสงสัยว่าการเปลี่ยนแปลงใด ๆ จากทริกเกอร์จะไม่อยู่ใน val2 ดังนั้นคุณต้องไปกับตารางผลลัพธ์ในกรณีนั้น สำหรับอะไรก็ตามนอกจากกรณีที่ง่ายที่สุดฉันคิดว่าตารางผลลัพธ์จะสามารถอ่านได้มากขึ้นในโค้ดของคุณเช่นกัน
สถานที่แห่งหนึ่งที่มีประโยชน์มากคือหากคุณต้องการเปลี่ยนคอลัมน์ให้เป็นรายการที่คั่นด้วยจุลภาค
DECLARE @list varchar(max) = '';
DECLARE @comma varchar(2) = '';
SELECT @list = @list + @comma + County, @comma = ', ' FROM County
print @list
SET @val2 = NextNum = NextNum + 1
ผมไม่ทราบว่าคุณที่คุณสามารถทำได้
OUTPUT
ค่าให้กับตัวแปรในINSERT
ประโยคโดยใช้INSERT-OUTPUT-VALUES
วิธีการตามที่ผู้ถามถาม