Masuk dengan Microsoft
Masuk atau buat akun.
Halo,
Pilih akun lain.
Anda memiliki beberapa akun
Pilih akun yang ingin Anda gunakan untuk masuk.

Gejala

Ketika menggunakan fungsi SCOPE_IDENTITY() atau @@IDENTITYuntuk mengambil nilai yang disisipkan ke dalam kolom identitas, Anda mungkin melihat bahwa fungsi-fungsi ini terkadang mengembalikan nilai yang salah. Masalah ini terjadi hanya saat kueri Anda menggunakan rencana eksekusi paralel. Untuk informasi selengkapnya tentang cara menentukan apakah kueri Anda akan menggunakan rencana eksekusi paralel merujuk pada bagian paralel antar kueri di artikel teknis berikut pada Unduhan Microsoft:

Penyebab

Microsoft telah mengonfirmasi bahwa hal ini merupakan masalah dalam produk Microsoft yang tercantum di bagian awal artikel ini.

Pemecahan Masalah

Informasi pembaruan kumulatif

SQL Server 2008 R2 Service Pack 1

Perbaikan untuk masalah ini pertama kali dirilis dalam Pembaruan Kumulatif 5 untuk SQL Server 2008 R2 Paket Layanan 1. Untuk informasi selengkapnya tentang cara mendapatkan paket pembaruan kumulatif ini, klik nomor artikel berikut untuk melihat artikel dalam Pangkalan Pengetahuan Microsoft: 

2659694Paket Pembaruan Kumulatif 5 untuk SQL Server 2008 R2 Paket Layanan 1

Catatan Karena build bersifat kumulatif, setiap rilis perbaikan baru berisi hotfix dan semua perbaikan keamanan yang disertakan dengan rilis perbaikan sebelumnya SQL Server 2008 R2. Kami menyarankan Anda untuk mempertimbangkan menerapkan rilis perbaikan terbaru yang berisi hotfix ini. Untuk informasi selengkapnya, klik nomor artikel berikut untuk melihat artikel di Pangkalan Pengetahuan Microsoft:

2567616Build SQL Server 2008 R2 yang dirilis setelah SQL Server 2008 R2 Service Pack 1 dirilis

Penyelesaian Masalah

Microsoft menyarankan agar Anda tidak menggunakan salah satu fungsi ini di kueri ketika rencana paralel dilibatkan karena tidak selalu dapat diandalkan. Sebagai gantinya, gunakan klausul OUTPUT pernyataan INSERT untuk mengambil nilai identitas seperti yang diperlihatkan dalam contoh di bawah ini.

Contoh penggunaan klausul OUTPUT:

DECLARE @MyNewIdentityValues table(myidvalues int)
deklarasi @A tabel (ID kunci primer int)
sisipkan ke @A bidang (1)
deklarasi @B tabel (ID int identitas kunci utama(1,1), B int not null)
sisipkan ke @B bidang (1)
pilih
    [RowCount] = @@RowCount,
    [@@IDENTITY] = @@IDENTITY,
    [SCOPE_IDENTITY] = SCOPE_IDENTITY()

setel profil statistik pada
sisipkan ke _ddr_T
output inserted.ID ke @MyNewIdentityValues
    pilih
            
b.ID         dari @A
            kiri bergabung @B b pada b.ID = 1
            kiri bergabung @B b2 pada b2. B = -1

            kiri _ddr_T t pada t.T = -1

        di mana tidak ada (pilih * _ddr_T t2 di mana t2.ID = -1)
menonaktifkan profil statistik

pilih
    [RowCount] = @@RowCount,
    [@@IDENTITY] = @@IDENTITY,
    [SCOPE_IDENTITY] = SCOPE_IDENTITY(),
    [IDENT_CURRENT] = IDENT_CURRENT('_ddr_T')
pilih * dari @MyNewIdentityValues
mulai

Jika situasi Anda mengharuskan Anda untuk menggunakan salah satu fungsi ini, Anda dapat menggunakan salah satu metode berikut ini untuk mengatasi masalah tersebut.

Metode 1:

Sertakan opsi berikut ini dalam kueri Anda

OPTION (MAXDOP 1)

Catatan: Hal ini mungkin merusak kinerja bagian SELECT dari kueri Anda.

Metode 2:

Baca nilai dari bagian SELECT ke dalam kumpulan variabel (atau variabel tabel tunggal) lalu sisipkan ke dalam tabel target dengan MAXDOP=1. Karena rencana INSERT tidak akan paralel, Anda akan mendapatkan semantik yang tepat, tetapi SELECT akan menjadi paralel untuk mencapai kinerja yang diinginkan.

Metode 3:

Jalankan pernyataan berikut untuk mengatur opsi derajat paralel maksimum ke 1:

sp_configure 'derajat paralel maksimum', 1

mulai

mengonfigurasi ulang dengan mengesampingkan

mulai

Catatan: Metode ini dapat menyebabkan degradasi kinerja di server. Anda tidak boleh menggunakan metode ini kecuali jika Anda telah mengevaluasinya dalam pengujian, atau perekanan, lingkungan.

Informasi Selengkapnya

Bug Microsoft Connect pada masalahhttps://docs.microsoft.com/en-us/collaborate/connect-redirect

Max Degree of Parallelism (MAXDOP)

Perlu bantuan lainnya?

Ingin opsi lainnya?

Jelajahi manfaat langganan, telusuri kursus pelatihan, pelajari cara mengamankan perangkat Anda, dan banyak lagi.

Komunitas membantu Anda bertanya dan menjawab pertanyaan, memberikan umpan balik, dan mendengar dari para ahli yang memiliki pengetahuan yang luas.

Apakah informasi ini berguna?

Seberapa puaskah Anda dengan kualitas bahasanya?
Apa yang memengaruhi pengalaman Anda?
Dengan menekan kirim, umpan balik Anda akan digunakan untuk meningkatkan produk dan layanan Microsoft. Admin TI Anda akan dapat mengumpulkan data ini. Pernyataan Privasi.

Terima kasih atas umpan balik Anda!

×