Yeni tabloyu bir seferde oluşturmak ve doldurmak için bir birleştirme kullanabilirsiniz:
SELECT
t.*
INTO
dbo.NewTable
FROM
dbo.TableWithIdentity AS t
LEFT JOIN dbo.TableWithIdentity ON 1 = 0
;
1 = 0
Durum nedeniyle , sağ taraf eşleşmeyecek ve böylece sol yan sıraların tekrarlanmasını önleyecektir ve bu bir dış bağlantı olduğundan, sol sıra sıraları da ortadan kaldırılmayacaktır. Son olarak, bu bir birleşim olduğu için, KİMLİK özelliği ortadan kaldırılmıştır.
Bu nedenle, yalnızca soldaki sütunların seçilmesi, yalnızca veri şeklinde, yani IDENTITY özelliğinin çıkarılmasıyla , dbo.TableWithIdentity'nin tam bir kopyasını üretecektir .
Tüm söylenenler, Max Vernon , akılda tutmaya değer bir yorumda geçerli bir noktaya değindi. Yukarıdaki sorgunun yürütme planına bakarsanız:
kaynak tablonun yürütme planında sadece bir kez belirtildiğini fark edeceksiniz. Diğer örnek, optimiser tarafından elimine edildi.
Bu nedenle, eğer optimizatör planın birleşme noktasının sağ tarafının plana gerek duymadığını doğru bir şekilde tespit edebiliyorsa, SQL Server'ın gelecekteki bir sürümünde, IDENTITY özelliğinin gerekmediğine karar verebileceğini beklemek makul olmalıdır. Sorgu planına göre ayarlanan kaynak satırında artık başka bir KİMLİK sütunu olmadığından, ikisi de kaldırıldı. Bu, yukarıdaki sorgunun bir noktada beklendiği gibi çalışmayı durdurabileceği anlamına gelir.
Doğru tarafından belirtildiği gibi, ypercubeᵀᴹ , bugüne kadar manuel açıkça katılmak varsa, KİMLİK özelliği korunmuş olmadığını belirten olmuştur:
Varolan bir kimlik sütunu yeni bir tabloya seçildiğinde, yeni sütun, [...] [t] SELECT ifadesinde bir birleşim içermedikçe, IDENTITY özelliğini devralır.
Bu yüzden, kılavuz söz etmeye devam ettiği sürece, davranışların aynı kalacağından emin olabiliriz.
Şeref Shaneis ve ypercubeᵀᴹ sohbet ilgili konusunu gündeme getirmek için.
JOIN (SELECT 1) AS dummy ON 1 = 1
da işe?