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.