আপনি যখন সত্ত্বা ফ্রেমওয়ার্ক ব্যবহার করেন, এটি অভ্যন্তরীণভাবে 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
আউটপুট ফলাফলগুলি একটি অস্থায়ী টেবিল ভেরিয়েবলে সংরক্ষণ করা হয়, টেবিলের সাথে ফিরে যোগদান করে এবং সারণির বাইরে সারি মান প্রদান করে।
দ্রষ্টব্য: কেন ইএফ অভ্যন্তরীণ ছক টেবিলের সাথে আসল টেবিলে ফিরে আসবে (কোন পরিস্থিতিতে দু'জন মিলে না।
তবে ইএফ এটি করে।
এই কৌশলটি ( OUTPUT
) কেবলমাত্র এসকিউএল সার্ভার ২০০৮ বা আরও নতুনতে উপলব্ধ।
সম্পাদনা - যোগদানের কারণ
সারণি ফ্রেমওয়ার্ক মূল OUTPUT
মানগুলি ব্যবহার না করে মূল টেবিলের সাথে ফিরে আসার কারণ EF rowversion
একটি নতুন সন্নিবেশ করা সারিটি পেতে এই কৌশলটিও ব্যবহার করে ।
বৈশিষ্ট্য: using ব্যবহার করে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
- আউটপুট ক্লজ আউটপুট টাইমস্ট্যাম্প: 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
। Do চেষ্টা 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();
আপনি এটি এক্স # এক্সিউটসকালার () ব্যবহার করে সি # তে পেতে পারেন।