ඔබ ආයතන රාමුව භාවිතා කරන විට, එය අභ්යන්තරව OUTPUT
අළුතින් ඇතුළු කරන ලද හැඳුනුම්පත් අගය ආපසු ලබා දීමට තාක්ෂණය භාවිතා කරයි
DECLARE @generated_keys table([Id] uniqueidentifier)
INSERT INTO TurboEncabulators(StatorSlots)
OUTPUT inserted.TurboEncabulatorID INTO @generated_keys
VALUES('Malleable logarithmic casing');
SELECT t.[TurboEncabulatorID ]
FROM @generated_keys AS g
JOIN dbo.TurboEncabulators AS t
ON g.Id = t.TurboEncabulatorID
WHERE @@ROWCOUNT > 0
ප්රතිදාන ප්රති results ල තාවකාලික වගු විචල්යයක ගබඩා කර ඇති අතර, නැවත මේසයට සම්බන්ධ වී පේළි අගය මේසයෙන් පිටතට ගෙන එයි.
සටහන: ඊඑෆ් අභ්යන්තරික කාලානුරූපී වගුවට නැවත සැබෑ වගුවට සම්බන්ධ වන්නේ මන්දැයි මා දන්නේ නැත (කුමන තත්වයන් යටතේ දෙදෙනා නොගැලපේ).
නමුත් ඊඑෆ් කරන්නේ එයයි.
මෙම තාක්ෂණය ( OUTPUT
) ලබා ගත හැක්කේ SQL Server 2008 හෝ නවතම ඒවා මත පමණි.
සංස්කරණය කරන්න - සම්බන්ධ වීමට හේතුව
හුදෙක් OUTPUT
අගයන් භාවිතා කරනවාට වඩා, ආයතන රාමුව මුල් වගුවට සම්බන්ධ වීමට හේතුව, rowversion
අලුතින් ඇතුළත් කළ පේළියක් ලබා ගැනීම සඳහා ඊඑෆ් ද මෙම තාක්ෂණය භාවිතා කරන බැවිනි .
ඔබ විසින් ඔබගේ ආයතනයක් රාමුව ආකෘති සර්ව සුභවාදී සමගාමී භාවිතා කළ හැකි භාවිතා Timestamp
විශේෂණය: 🕗
public class TurboEncabulator
{
public String StatorSlots)
[Timestamp]
public byte[] RowVersion { get; set; }
}
ඔබ මෙය කරන විට, ආයතන රාමුවට rowversion
අලුතින් ඇතුළත් කළ පේළිය අවශ්ය වේ:
DECLARE @generated_keys table([Id] uniqueidentifier)
INSERT INTO TurboEncabulators(StatorSlots)
OUTPUT inserted.TurboEncabulatorID INTO @generated_keys
VALUES('Malleable logarithmic casing');
SELECT t.[TurboEncabulatorID], t.[RowVersion]
FROM @generated_keys AS g
JOIN dbo.TurboEncabulators AS t
ON g.Id = t.TurboEncabulatorID
WHERE @@ROWCOUNT > 0
මෙය ලබා ගැනීම සඳහා Timetsamp
ඔබට වගන්තියක් භාවිතා කළ නොහැකOUTPUT
.
එයට හේතුව මේසය මත ප්රේරකයක් තිබේ නම්, Timestamp
ඔබ පිටවන ඕනෑම දෙයක් වැරදියි:
- ආරම්භක ඇතුළු කිරීම. කාලරාමුව: 1
- OUTPUT වගන්තිය මඟින් කාලරාමුව ප්රතිදානය කරයි: 1
- ප්රේරකය පේළිය වෙනස් කරයි. කාලරාමුව: 2
ඔබ මේසය මත ප්රේරකයක් ඇත්නම් ආපසු ලබා දුන් කාලරාමුව කිසි විටෙකත් නිවැරදි නොවේ. එබැවින් ඔබ වෙනම භාවිතා කළ යුතුයSELECT
.
ඔබ වැරදි පේළියකට ගොදුරු වීමට කැමති වුවද, වෙනමම සිදු කිරීමට ඇති අනෙක් හේතුව SELECT
නම් ඔබට rowversion
වගු විචල්යයකට පිටවිය නොහැකි වීමයි :
DECLARE @generated_keys table([Id] uniqueidentifier, [Rowversion] timestamp)
INSERT INTO TurboEncabulators(StatorSlots)
OUTPUT inserted.TurboEncabulatorID, inserted.Rowversion INTO @generated_keys
VALUES('Malleable logarithmic casing');
එය කිරීමට තුන්වන හේතුව සමමිතිය සඳහා ය. UPDATE
ප්රේරකයක් සමඟ මේසයක් මත ක්රියා කරන විට , ඔබට වගන්තියක් භාවිතා කළ නොහැකOUTPUT
. UPDATE
සමඟ උත්සාහ කිරීමට OUTPUT
සහාය නොදක්වන අතර එය දෝෂයක් ලබා දෙනු ඇත:
එය කළ හැකි එකම ක්රමය පසු විපරම් SELECT
ප්රකාශයක් පමණි:
UPDATE TurboEncabulators
SET StatorSlots = 'Lotus-O deltoid type'
WHERE ((TurboEncabulatorID = 1) AND (RowVersion = 792))
SELECT RowVersion
FROM TurboEncabulators
WHERE @@ROWCOUNT > 0 AND TurboEncabulatorID = 1
INSERT INTO Table1(fields...) OUTPUT INSERTED.id VALUES (...)
, හෝ පැරණි ක්රමය:INSERT INTO Table1(fields...) VALUES (...); SELECT SCOPE_IDENTITY();
ExecuteScalar () භාවිතයෙන් ඔබට එය c # වලින් ලබා ගත හැකිය.