Geçici bir tabloya veri ekleme


195

Geçici bir tablo oluşturduktan ve böyle veri türlerini bildirdikten sonra;

 CREATE TABLE #TempTable(
 ID int,
 Date datetime,
 Name char(20))

Daha sonra veritabanındaki fiziksel bir tabloda tutulan ilgili verileri nasıl eklerim?

Yanıtlar:


245
INSERT INTO #TempTable (ID, Date, Name) 
SELECT id, date, name 
FROM physical_table

5
İşiniz bittiğinde tabloyu bırakmayı unutmayın, aksi takdirde "Veritabanında '#TempTable' adında bir nesne zaten var." hatası (sorguyu tekrar çalıştırmanız gerekir ...)
— Rhdr

İlk soru zaten yaratılmış olan tablo hakkındaydı. İpucu yararlı olduğundan, yazarın sorusuna bağlı değildir
— alexsuslin

99

Tüm sütunlardaki tüm verileri eklemek için şunu kullanın:

SELECT * INTO #TempTable
FROM OriginalTable

Unutma DROPonunla ve bitirdikten sonra geçici tablonun önce yeniden oluşturmayı deneyin:

DROP TABLE #TempTable

9
Ben gerek yok çünkü bu gibiCREATE#TempTable
— MAbraham1


41

InsertSQL Server'da benim yolum . Ayrıca genellikle geçici bir tablonun olup olmadığını kontrol ederim.

IF OBJECT_ID('tempdb..#MyTable') IS NOT NULL DROP Table #MyTable

SELECT b.Val as 'bVals'
  INTO #MyTable
FROM OtherTable as b

21
SELECT * 
INTO #TempTable
FROM table

Gerçekten en basit cevap burada. Ayrıca dbo.MyTable kullanabilirsiniz ve kalıcı bir tablo olacaktır. Kolay peasy
— Fandango68

15

Aynı sorunu çözmek için iki yaklaşım sundum,

Çözüm 1: Bu yaklaşım 2 adımı içerir, önce belirtilen veri türüyle geçici bir tablo oluşturun, ardından değeri mevcut veri tablosundan ekleyin.

CREATE TABLE #TempStudent(tempID  int, tempName  varchar(MAX) )
INSERT INTO #TempStudent(tempID, tempName) SELECT id, studName FROM students where id =1

SELECT * FROM #TempStudent

Çözüm 2: Değerleri doğrudan geçici tabloya ekleyebileceğiniz bu yaklaşım basittir, burada sistem otomatik olarak aynı orijinal tablo türüne sahip geçici tablo oluşturmaya özen gösterir.

SELECT id, studName  INTO #TempStudent FROM students where id =1

SELECT * FROM #TempStudent

Bu geçici bir tablo olduğunu fark ederken, ben hala birilerinin varchar (MAX) kullanmasını asla tavsiye etmem.
— bp_

8

Doğru sorgu:

drop table #tmp_table

select new_acc_no, count(new_acc_no) as count1
into #tmp_table
from table
where unit_id = '0007' 
group by unit_id, new_acc_no
having count(new_acc_no) > 1

10
Bu cevabın soru ile ilgisi yoktur. Bu bilgiyi başka bir yerden aldınız. Çıkarma new_acc_no, unit_id = '0007', group by, having count(new_acc_no) > 1, vb dönüşümleri tam bir kopya halinde cevap: stackoverflow.com/a/15762663/1476885
— zanon

7

Temp tablosunu oluşturduktan sonra normal bir INSERT INTO () SELECT FROM

INSERT INTO #TempTable (id, Date, Name)
SELECT t.id, t.Date, t.Name
FROM yourTable t

5
insert into #temptable (col1, col2, col3)
select col1, col2, col3 from othertable

Bunun kötü uygulama olarak kabul edildiğini unutmayın:

insert into #temptable 
select col1, col2, col3 from othertable

Geçici tablonun tanımı değişecek olsaydı, kod çalışma zamanında başarısız olabilir.


4
INSERT INTO #TempTable(ID, Date, Name)
SELECT OtherID, OtherDate, OtherName FROM PhysicalTable

3

Geçici tablonun temel çalışması aşağıda verilmiştir, ihtiyaçlarınıza göre değiştirin ve kullanın,

- SICAKLIK TABLOSU OLUŞTUR

CREATE TABLE #MyTempEmployeeTable(tempUserID  varchar(MAX), tempUserName  varchar(MAX) )

- DEĞERİ SICAKLIK TABLOSUNA EKLEYİN

INSERT INTO #MyTempEmployeeTable(tempUserID,tempUserName) SELECT userid,username FROM users where userid =21

- QUERY A TEMP TABLE [Bu, bir diğer kullanıcı oturumu örneğinde değil, yalnızca aynı oturumda / Eşgörünümde çalışır]

SELECT * FROM #MyTempEmployeeTable

- SICAKLIK TABLOSUNDA DEĞERİ SİL

DELETE FROM #MyTempEmployeeTable

- SICAKLIK TABLOSUNU DÜŞÜRÜN

DROP TABLE #MyTempEmployeeTable

Bu geçici bir tablo olduğunu fark ederken, ben hala birilerinin varchar (MAX) kullanmasını asla tavsiye etmem.
— bp_

@bp_ Bu, kullanıcıyı açıklayan genel bir örnek pasajdır ve Kullanıcı, veri türünü ve boyutunu uygulama gereksinimlerine göre belirleyebilir.
— BHUVANESH MOHANKUMAR

2
insert #temptable
select idfield, datefield, namefield from yourrealtable
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.