Dear Folks,
Langsung aja,
Memang benar dilihat di tabel tempdb, temporary tabel yang kita buat
baik melalui coding vb maupun lansung dengan perintah sql tidak akan
pernah ada karena dia adalah temporary table. Temporary tabel dapat
dibuat dengan cara yang sama dengan jika kita membuat user-defined
table, kecuali nama temporary tabel *harus* diawali dengan karakter
hash (#).
**keberaadaan dari temporary table sangat pendek*.
jika batch (kumpulan satu atau lebih T-SQL statement) atau store
procedure yang membuat temporary table tersebut berakhir masa
operasinya, maka otomatis temporary tersebut akan didelete oleh SQL
Server.Jika kamu membuat temporary tabel secara interaktif misal dari
Query Analyzer, dia akan tetap hidup selama kamu tidak menutup session
di query analyzer tersebut.
**Scope dari temporary table juga terbatas,
*
- Hanya sebuah koneksi (ke SQL Server tentunya) yang membuat temporary
table yang dapat melihat temporary tabel tersebut(nanti saya beri contoh
codingnya)
- Jika banyak user misal dalam aplikasi Client / Server membuat
temporary table dengan nama yang sama, maka user tersebut hanya dapat
melihat temporary tabel milikya saja (temporary tabel yang dibuat oleh
user tersebut saja).
- *Temporary Tabel dibuat di tempdb* (secara otomatis oleh SQL Server
jika kita create table dengan prefix #, meskipun kamu tidak sedang men-
use tempdb).Dibuat dengan kombinasi nama table (diberi nama oleh kita)
dan connection identifier (digenerate oleh SQL Server) .Spt kamu tau
panjang nama yang dapat diberikan ke sebuah Object di SQL server
adalah 128 karakter,tetapi khusus untuk temporary table panjangnya
dibatasi hingga 116 char,so remain 12 char itulah yang membuat namanya
menjadi unique.
Saran saya jika memang mau mengakses isi dari temporary tabel gunakan
*Global Temporary Tabel*. Isi dari global temporary tabel dapat diakses
oleh aplikasi / koneksi yang tidak membuat Global temporary table
tersebut,dengan catatan user / aplikasi yang mencreate Global Temporary
Tabel tersebut belum menutup koneksinya.Scopenya lebih luas.
Contoh :
* Temporary Table
Untuk membuat : Create table #ProductTemp (
ProductID int primary key
Nama varchar(50)
)
* cek di tempdb dan cari di SysObject
Select Name from SELECT *
FROM sysobjects
WHERE (name LIKE '#Pro%')
* cek di tempdb dan cari di syscolumns untuk nama fieldnya
syscolumns dan sysobjects dihubungkan dengan field Id
* Global Temporary Table
untuk membuat : Create tabel ##ProductTemp(
ProductID int primary key
Nama varchar(50)
)
*Nama tabel diawali dengan ##
*oke.. sekarang coba codingnya ya..
- Coba kamu buat 2 apliksi yang sama persis (atau 1 aplikasi --> exenya
dibuka 2 kali).
1. Buat Form, tambahkan 4 button 2 textbox.
Button 1 = create tabel temporary
Button 2 = tutup tabel temporary
Button 3 = tambah produk
Button 4 = tampil produk
ke 2 buah text untuk menampilkan produk dari temporary tabel
Private commd As ADODB.Command
Private kon As ADODB.Connection
Private rsTemp As ADODB.Recordset
Private Sub Form_Load()
Set kon = New ADODB.Connection
kon.ConnectionString = "Provider=SQLOLEDB.1;Persist Security
Info=False;User ID=sa;password=;Initial Catalog=Northwind" '--> default
Northwind, padahal nantinya tabelnya gak
'create disini tapi di tempdb
kon.Open
End Sub
Private Sub Command3_Click() '= Button 1
Set commd = New ADODB.Command
Set rsTemp = New ADODB.Recordset
commd.ActiveConnection = kon
commd.CommandText = "Create Table #ProductTemp ( ProductID INT
PRIMARY KEY, Name varchar(50))"
commd.CommandType = adCmdText
Set rsTemp = commd.Execute
Set rsTemp = Nothing
Set commd = Nothing
End Sub
Private Sub Command4_Click() 'Button 2
Set kon = Nothing
End Sub
Private Sub Command5_Click() ' = Button 3
Call addProduct
End Sub
Private Sub Command6_Click() '= Button 4
Call tampilProduct
End Sub
Private Sub addProduct()
If commd Is Nothing Then
Set commd = New ADODB.Command
End If
If rsTemp Is Nothing Then
Set rsTemp = New ADODB.Recordset
End If
commd.ActiveConnection = kon
commd.CommandText = "Insert Into #ProductTemp(ProductID,Name) VALUES
(0001,'IBM THINKPAD T41')"
commd.CommandType = adCmdText
Set rsTemp = commd.Execute
Set rsTemp = Nothing
Set commd = Nothing
End Sub
Private Sub tampilProduct()
If commd Is Nothing Then
Set commd = New ADODB.Command
End If
If rsTemp Is Nothing Then
Set rsTemp = New ADODB.Recordset
End If
commd.ActiveConnection = kon
commd.CommandText = "Select * from #ProductTemp"
Set rsTemp = commd.Execute
Text1.Text = rsTemp(0).Value
Text2.Text = rsTemp(1).Value
Set rsTemp = Nothing
Set commd = Nothing
End Sub
=============
Oke .. coba dulu dengan temporary table--> akses dengan aplikasi satunya
pasti error
Invalid Object Name "#ProductTemp'
, kemudian coba kamu ganti dengan global temporary tabel, tambahkan ##
pada setiap nama tabel di atas misal
...
commd.CommandText = "Select * from #ProductTemp"
ubah jadi commd.CommandText = "Select * from ##ProductTemp"
dan coba tampilkan dengan aplikasi yang tidak membuat temporary tabel
tersebut.
oke, semoga membantu.
Wassalamualaikum
Afiadi S13RA
gus wrote:
>
> Masalahnya gini loh, sy bikin local temporary table yang di create via
> coding sekaligus insert data dari koding juga, as we know local
> temporary table kan
> ngak nampil di list tabel
> database karena sifatnya yang temporer, kalo koneksi kita sudah
> diputus maka SQL Server secara otomatis akan men drop tabel temporary
> tersebut. Gw baca di Bokk Online katanya temporary tabel disimpen di
> database tempdb(bawaan SQL Server), tapi gw lihat ngak ada.
>
> Yang jadi masalah adalah bagaimana kita melihat isi temporary tabel
> tersebut sebelum si sql server men drop tabelnya ? Trus dimana
> sebenarnya lokasi temporary tbel tersebut ?
>
> Terimakasih atas bantuannya.
>
> Thursday, May 31, 2007, 11:26:49 AM, you wrote:
>
> > hihihi saya juga ga jelas sih..
> >
> > tapi maksut Mas Gus itu mungkin gini ..
> > Mas Gus ini punya tabel, sebut Tabel Pegawai ..
> > Mas Gus ini mungkin mo tau query apa aja yg udah dilakuin ke Tabel
> Pegawai
> > (mo UPD, DEL, INS, SEL dll) .. bukan begitu Mas Gus?
> >
> > klo gitu sih yaa bikin lagi aja tabel lagi, misalnya Tabel QPegawai ..
> > isinya cukup 1 field tipe string/long text
> > jadi tiap bikin query ke tabel Pegawai, masukin query tsb ke tabel
> QPegawai
> > misal :
> > Mas Gun mo liat pegawai dgn NIP 3201
> > pastikan pake SELECT * FROM Pegawai WHERE NIP=3201
> > naaah di bawahnya eksekusi aja INSERT INTO QPegawai VALUES ('SELECT
> * FROM
> > Pegawai WHERE NIP=3201')
> > begitu ..
> >
> > BTW.. maksutnya temporary tabel itu apa yak?
> > CMIIW, maaf saya awam ;)
> >
> > On 5/31/07, Toni Rahayu <[EMAIL PROTECTED]
> <mailto:toni.rahayu%40gmail.com>> wrote:
> >>
> >>
> >>
> >> Saya bingung mas,
> >> yang dimaksud itu ngecek query atau ngecek data yang masuk ?????
> >>
> >> rgds
> >>
> >> "Akhmad Aldi" <[EMAIL PROTECTED] <mailto:aldi141081%40gmail.com>
> <aldi141081%40gmail.com>> on
> >> 05/31/2007 02:09:23 AM
> >>
> >> Please respond to [email protected]
> <mailto:indoprog-vb%40yahoogroups.com><indoprog-vb%40yahoogroups.com>
> >>
> >> To: [email protected]
> <mailto:indoprog-vb%40yahoogroups.com> <indoprog-vb%40yahoogroups.com>
> >> cc: (bcc: Toni Rahayu/IT/domino_srv)
> >>
> >> Subject: Re: [indoprog-vb] Nangkep Temporary Table
> >>
> >> bikin tabel lagi, utk nampung smua query ke tabel itu ;)
> >>
> >> klo pake AS400 sih ada sistem JOURNAL ...
> >>
> >> On 5/30/07, gus <[EMAIL PROTECTED]
> <mailto:penakluk82%40yahoo.com.au> <penakluk82%40yahoo.com.au>>
> >> wrote:
> >> >
> >> >
> >> >
> >> > Halo teman2,
> >> >
> >> > Gw bikin local teporary table, trus dimasukan beberapa data.
> >> > Masalahnya gimana caranya kita ngecek(query) apa saja data yang telah
> >> > masuk kedalam tabel temporary tersebut ?
> >> >
> >> > Terimakasih atas pencerahannya
> >> >
>
>