Punya query SELECT yang kompleks, dari mana saya ingin memasukkan semua baris ke dalam variabel tabel, tetapi T-SQL tidak mengizinkannya.
Sepanjang baris yang sama, Anda tidak bisa menggunakan variabel tabel dengan kueri SELECT INTO atau INSERT EXEC. http://odetocode.com/Articles/365.aspx
Contoh singkat:
declare @userData TABLE(
name varchar(30) NOT NULL,
oldlocation varchar(30) NOT NULL
)
SELECT name, location
INTO @userData
FROM myTable
INNER JOIN otherTable ON ...
WHERE age > 30
Data dalam variabel tabel nantinya akan digunakan untuk menyisipkan / memperbarui kembali ke tabel yang berbeda (kebanyakan salinan data yang sama dengan pembaruan kecil). Tujuannya adalah membuat skrip sedikit lebih mudah dibaca dan lebih mudah disesuaikan daripada melakukan SELECT INTO
langsung ke tabel yang benar. Performa bukan masalah, karena rowcount
ini cukup kecil dan hanya berjalan secara manual bila diperlukan.
... atau katakan saja jika saya melakukan semuanya salah.
sumber
Tujuannya
SELECT INTO
adalah (sesuai dokumen, penekanan saya)Tetapi Anda sudah memiliki tabel target! Jadi yang Anda inginkan adalah
Dan dalam sintaks ini , itu diizinkan untuk
MyTable
menjadi variabel tabel.sumber
MyTable
sini adalah penampung untuk nama tabel Anda yang sebenarnya . Saya tidak berpikir ada database nyata dengan tabel bernama ...MyTable
Anda juga bisa menggunakan ekspresi tabel umum untuk menyimpan kumpulan data sementara. Mereka lebih elegan dan ramah adhoc:
sumber
Anda dapat mencoba menggunakan tabel sementara ... jika Anda tidak melakukannya dari aplikasi. (Mungkin ok untuk menjalankan ini secara manual)
Anda melewatkan upaya untuk mendeklarasikan tabel seperti itu ... Membantu permintaan adhoc ... Ini membuat tabel temp lokal yang tidak akan terlihat oleh sesi lain kecuali Anda berada di sesi yang sama. Mungkin masalah jika Anda menjalankan kueri dari suatu aplikasi.
jika Anda mengharuskannya berjalan di aplikasi, gunakan variabel yang dideklarasikan dengan cara ini:
Sunting: karena banyak dari Anda menyebutkan visibilitas yang diperbarui ke sesi dari koneksi. Membuat tabel temp bukan pilihan untuk aplikasi web, karena sesi dapat digunakan kembali, menempel variabel tempa dalam kasus tersebut
sumber
function
. Dalam pengalaman saya, dalam kebanyakan kasus di mana seseorang berpikir mereka membutuhkan pernyataan seperti itu, ini sebenarnya berarti mereka harus memikirkan kembalifunction
- atau setidaknya menolak untuk aprocedure
. Setidaknya berbicara sendiri. :-)Coba gunakan
INSERT
alih-alihSELECT INTO
:sumber
Pertama-tama buat tabel temp:
Langkah 1:
** Langkah 2: ** Masukkan Beberapa nilai dalam tabel Temp.
Langkah 3: Deklarasikan tabel Variabel untuk menyimpan data tabel temp.
Langkah 4: pilih nilai dari tabel temp dan masukkan ke dalam variabel tabel.
Akhirnya nilai dimasukkan dari tabel temp ke variabel Tabel
Langkah 5: Dapat Memeriksa nilai yang dimasukkan dalam variabel tabel.
sumber
OK, Sekarang dengan usaha yang cukup saya bisa memasukkan ke dalam @table menggunakan di bawah ini:
Hal utama di sini adalah memilih kolom untuk disisipkan.
sumber
Salah satu alasan untuk menggunakan SELECT INTO adalah memungkinkan Anda menggunakan IDENTITY:
Ini tidak akan berfungsi dengan variabel tabel, yang terlalu buruk ...
sumber
IDENTITY
kolom.