Pertanyaan ini mendekati apa yang saya butuhkan, tetapi skenario saya sedikit berbeda. Tabel sumber dan tabel tujuan sama dan kunci utamanya adalah pengidentifikasi unik (guid). Ketika saya mencoba ini:
insert into MyTable
select * from MyTable where uniqueId = @Id;
Saya jelas mendapatkan pelanggaran batasan kunci utama, karena saya mencoba menyalin kunci utama. Sebenarnya, saya sama sekali tidak ingin menyalin kunci utama. Sebaliknya, saya ingin membuat yang baru. Selain itu, saya ingin menyalin bidang tertentu secara selektif, dan membiarkan yang lain kosong. Untuk membuat masalah lebih kompleks, saya perlu mengambil kunci utama dari rekaman asli, dan memasukkannya ke bidang lain di salinan (bidang Id Sebelumnya).
Saya yakin ada solusi mudah untuk ini, saya hanya tidak tahu cukup TSQL untuk mengetahui apa itu.
sumber
Oke, saya tahu ini masalah lama, tetapi saya tetap memposting jawaban saya.
Saya suka solusi ini. Saya hanya perlu menentukan kolom identitas.
Kolom "id" adalah kolom identitas dan itulah satu-satunya kolom yang harus saya tentukan. Lagipula itu lebih baik daripada sebaliknya. :-)
Saya menggunakan SQL Server. Anda mungkin ingin menggunakan "
CREATE TABLE
" dan "UPDATE TABLE
" di baris 1 dan 2. Hmm, saya melihat bahwa saya tidak benar-benar memberikan jawaban yang dia inginkan. Dia juga ingin menyalin id ke kolom lain. Tetapi solusi ini bagus untuk membuat salinan dengan auto-id baru.Saya mengedit solusi saya dengan idéas dari Michael Dibbets.
Anda dapat melepaskan lebih dari satu kolom dengan memisahkannya dengan ",". : Id harus diganti dengan id dari baris yang ingin Anda salin. MyDatabase, MyTable dan IndexField harus diganti dengan nama Anda (tentu saja).
sumber
TempTable
, bukankah lebih baik digunakan#TempTable
, jadi ini adalah tabel sementara yang sebenarnya?use MyDatabase; SELECT * INTO #TempTable FROM [TABLE] WHERE [indexfield] = :id; ALTER TABLE #TempTable DROP COLUMN [indexfield]; INSERT INTO [TABLE] SELECT * FROM #TempTable; DROP TABLE #TempTable;
Dengan cara ini saya tahu ini akan segera dibersihkan tanpa penundaan dari menulis file intermittend ke disk.$identity
jika Anda tidak ingin membuat kode keras nama kolom identitas AndaSaya menduga Anda mencoba untuk tidak menuliskan semua nama kolom. Jika Anda menggunakan SQL Management Studio, Anda dapat dengan mudah mengklik kanan pada tabel dan Script As Insert .. maka Anda dapat mengotak-atik output tersebut untuk membuat kueri.
sumber
Tentukan semua bidang kecuali bidang ID Anda.
sumber
Saya memiliki masalah yang sama di mana saya ingin satu skrip bekerja dengan tabel yang kolomnya ditambahkan secara berkala oleh pengembang lain. Tidak hanya itu, tetapi saya mendukung berbagai versi database kami karena pelanggan mungkin tidak semuanya up-to-date dengan versi saat ini.
Saya mengambil solusi dari Jonas dan mengubahnya sedikit. Ini memungkinkan saya untuk membuat salinan baris dan kemudian mengubah kunci utama sebelum menambahkannya kembali ke tabel sumber asli. Ini juga sangat berguna untuk bekerja dengan tabel yang tidak mengizinkan nilai NULL dalam kolom dan Anda tidak ingin menentukan setiap nama kolom di INSERT.
Kode ini menyalin baris untuk 'ABC' ke 'XYZ'
Setelah Anda menyelesaikan drop tabel temp.
sumber
Saya tahu jawaban saya terlambat ke pesta. Tetapi cara saya memecahkan sedikit berbeda dari semua jawaban.
Saya mengalami situasi, saya perlu mengkloning baris dalam tabel kecuali beberapa kolom. Beberapa orang itu akan memiliki nilai baru. Proses ini akan mendukung secara otomatis untuk perubahan tabel di masa mendatang. Ini berarti, klon record tanpa menentukan nama kolom apa pun.
Pendekatan saya adalah,
sumber
sumber
Jika "kunci" adalah bidang PK Anda dan itu autonumerik.
itu akan menghasilkan rekor baru, menyalin field1 dan field2 dari catatan asli
sumber
Tabel saya memiliki 100 bidang, dan saya membutuhkan kueri agar dapat berfungsi. Sekarang saya dapat mengganti sejumlah bidang dengan beberapa logika bersyarat dasar dan tidak khawatir tentang posisi ordinalnya.
Ganti nama tabel di bawah ini dengan nama tabel Anda
Ganti nama bidang identitas asli dengan nama bidang PK Anda
Ganti nama tabel lagi (nama tabel target dan nama tabel sumber); edit
where
kondisi Andasumber
Anda bisa melakukan seperti ini:
Di sana, alih-alih 112 Anda harus meletakkan sejumlah id maksimum dalam tabel DENI / FRIEN01P.
sumber
Berikut adalah cara saya melakukannya menggunakan ASP klasik dan tidak bisa membuatnya berfungsi dengan jawaban di atas dan saya ingin dapat menyalin produk di sistem kami ke product_id baru dan membutuhkannya agar dapat berfungsi bahkan ketika kami tambahkan lebih banyak kolom ke tabel.
sumber