في SQL Server هل من الممكن الحصول على "معرف" من سجل عند إدراج يعدم ؟

StackOverflow https://stackoverflow.com/questions/55159

  •  09-06-2019
  •  | 
  •  

سؤال

في SQL Server 2005 لدي "الهوية" حقل في الجدول الذي يحتوي على "الهوية" تعيين إلى "نعم".لذلك عندما أدخل يتم تنفيذها على هذا الجدول "id" يحصل على تعيين تلقائيا إلى التالي تزايد عدد صحيح.هل هناك طريقة سهلة عندما إدراج يتم تنفيذها للحصول على ما "id" كان من المقرر أن دون الحاجة إلى القيام حدد بيان الحق بعد إدراج?

مكررة من:
أفضل طريقة للحصول على هوية إدراج الصف ؟

هل كانت مفيدة؟

المحلول

في .صافي على الأقل ، يمكنك إرسال استعلامات متعددة إلى ملقم في دفعة واحدة.أفعل هذا في بلدي التطبيق:

command.CommandText = "INSERT INTO [Employee] (Name) VALUES (@Name); SELECT SCOPE_IDENTITY()";
int id = (int)command.ExecuteScalar();

تعمل مثل السحر.

نصائح أخرى

إذا كنت إدراج صفوف متعددة ، واستخدام OUTPUT و INSERTED.columnname شرط على insert بيان طريقة بسيطة للحصول على جميع معرفات في الجدول المؤقت.

DECLARE @MyTableVar table( ID int,  
                               Name varchar(50),  
                               ModifiedDate datetime);  
INSERT MyTable  
        OUTPUT INSERTED.ID, INSERTED.Name, INSERTED.ModifiedDate INTO @MyTableVar  
SELECT someName, GetDate() from SomeTable  

Scope_identity() هو الطريقة المفضلة ، انظر: 6 طرق مختلفة للحصول على قيمة الهوية الحالية

SCOPE_IDENTITY();هو أفضل رهان.وإذا كنت تستخدم .صافي فقط تمرير لدينا معلمة تحقق قيمة بعد هذا الإجراء يتم تشغيل.

CREATE PROCEDURE [dbo].[InsertProducts]
    @id             INT             = NULL OUT,
    @name           VARCHAR(150)    = NULL,
    @desc           VARCHAR(250)    = NULL

AS

    INSERT INTO dbo.Products
       (Name,
        Description)
    VALUES
       (@name,
        @desc)

    SET @id = SCOPE_IDENTITY();

لديك لتحديد scope_identity() وظيفة.

للقيام بذلك من تطبيق التعليمات البرمجية, أنا عادة لتغليف هذه العملية في إجراء مخزن حتى أنها لا تزال تبدو مثل واحد الاستعلام بلدي التطبيق.

أنا أميل إلى يفضل إرفاق تؤدي إلى جدول باستخدام إدارة المؤسسة.بهذه الطريقة أنت لا داعي للقلق حول كتابة المزيد من البيانات sql في التعليمات البرمجية الخاصة بك.الألغام تبدو شيئا مثل هذا:

إنشاء الزناد tblName على dbo.tblName لإدراج كما حدد new_id = @@الهوية

ثم من داخل التعليمات البرمجية الخاصة بك ، علاج إدراج البيانات مثل تحديد البيانات - فقط تنفيذ وتقييم النتائج.إن "newID" العمود سوف تحتوي على هوية الصف الذي قمت بإنشائه.

وربما هذا هو أفضل حل وجدته ل SQL Server..Sql Server بإرجاع قيمة عمود الهوية بعد insert

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top