En iyi yanıtlayıcılar
sql id ye göre veri taşıma

Soru
-
merhaba
Aynı database altında çalışan iki farklı tablo arasında veri taşımak istiyorum.
mesela A tablosunda stok listem var ve kullanılan malzemeyi id numarasını seçerek buradan silerek B tablosuna giden ürünler olarak eklemek istiyorum, internete hep tablo kopyalamadan bahsedilmiş, konu hakkında yardımlarınızı rica ederim.
iyi çalışmalar
- Düzenleyen uardal 15 Mart 2012 Perşembe 10:06
- Değiştirilmiş Tür Serkan Bark 19 Mart 2012 Pazartesi 08:20
Yanıtlar
-
Merhaba,
Asagiya daha onceden yazdigim bi code'u sizin icin degistirerek ekliyorum. Oncesinde birde TabloKontrol diye bir tablo yaratmaniz gerekiyor. Silerken Tabloyu yormamak icin 2dk aralik vererek aktarilanlari siliyor.
IF NOT EXISTS (SELECT TOP(1) * FROM [TestDB].[dbo].[TabloA] WITH(NOLOCK) WHERE [Id] IN (SELECT [Id] FROM [PostaciOldOrders].[dbo].[TabloB] WITH(NOLOCK))) BEGIN INSERT INTO [PostaciOldOrders].[dbo].[TabloB] ( [Id], [Data] ) OUTPUT INSERTED.Id INTO [TestDB].[dbo].[TabloKontrol] (Id) ( SELECT [Id], [Data] FROM [TestDB].[dbo].[TabloA] WITH(NOLOCK) WHERE [Id] < 20000 ) END GO DECLARE @Tarih VARCHAR(50) DECLARE @Sayac INT SET @Sayac = 0 WHILE EXISTS (SELECT TOP(1) * FROM [TestDB].[dbo].[TabloA] WHERE [Id] IN (SELECT [Id] FROM [TestDB].[dbo].[TabloKontrol] WITH(NOLOCK))) BEGIN DELETE TOP(1000) FROM [TestDB].[dbo].[TabloA] WHERE [Id] IN (SELECT [Id] FROM [TestDB].[dbo].[TabloB] WITH(NOLOCK)) SET @Tarih = GETDATE() RAISERROR (@Tarih, 0, 1) WITH NOWAIT WAITFOR DELAY '00:02:00' SET @Sayac = @Sayac + ISNULL(@@ROWCOUNT,0) END GO IF NOT EXISTS (SELECT TOP(1) * FROM [TestDB].[dbo].[TabloKontrol] WITH(NOLOCK) WHERE [Id] IN (SELECT [Id] FROM [TestDB].[dbo].[TabloA] WITH(NOLOCK))) BEGIN TRUNCATE TABLE [TestDB].[dbo].[TabloKontrol] END GO
Kolay gelsin.
http://www.yigitaktan.com
- Yanıt Olarak İşaretleyen Serkan Bark 19 Mart 2012 Pazartesi 08:20
-
merhaba
şimdilik olayın mantığını anlamak için aşağıdaki gibi bir şey yaptım ve çalıştı.
girdview ın tıklanma özelliğini kullanarak ve rowindex olayıyla seçtiğin satırdaki verileri zaten programımda mevcut olan textbox lara attım, oradanda insert into komutu ile diğer tabloya taşıdım, işim bitincede eski kayıtı ilk tablodan sildim. olayı görmek için ve kolay olsun diye şimdilik textboxlara attım fakat dataset ve datarow olayının kullanımını biraz daha öğrenebilirsem daha mantıklı bir çözüme ulaşabilirim diye düşünüyorum.
Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
Dim satirno As Integer
satirno = e.RowIndex
Label11.Text = DataGridView1.Rows(satirno).Cells(0).Value.ToString()
"
"
txt_çıkış.Text = DataGridView1.Rows(satirno).Cells(8).Value.ToString()
txt_açıklama.Text = DataGridView1.Rows(satirno).Cells(9).Value.ToString()
referans.Text = DataGridView1.Rows(satirno).Cells(10).Value.ToString()
End SubPrivate Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
Dim komut As SqlCommand = New SqlCommand("INSERT INTO tabloA (çağrıno,marka,model,referans,serino,macid,bölge,geliş_tarihi,çıkış_tarihi,açıklama) VALUES ('" + çağrıno.Text + "','" + txt_marka.Text + "','" + txt_model.Text + "','" + referans.Text + "','" + txt_serino.Text + "','" + txt_macid.Text + "','" + txt_bölge.Text + "','" + txt_geliş.Text + "','" + txt_çıkış.Text + "','" + txt_açıklama.Text + "')", baglantı)
- Yanıt Olarak İşaretleyen Serkan Bark 19 Mart 2012 Pazartesi 08:21
-
Merhaba,
Ilgili linkten solution'i cekip deneyebilirsiniz. Denemek icin DB 'de 2 adet tablo yaratin. ID ve DATA column isimleri olusturun. Iki tabloda da ID'leri identity olarak set edin. A ya data doldurun. B bos kalsin.
Tool su sekilde calisiyor; TabloA <-> TabloB ye gridview 'de datalari tasiyor. tasidigini tasidigi yerden silior. Once gridview 'den Row olarak secip Saga/Sola at diyin sonra kaydet diyin. VS2010 C# 'da build ettim.
Solution'i buradan cekebilirsiniz: http://www.2shared.com/file/qe0n1-jT/Yigit.html
Kolay gelsin.
http://www.yigitaktan.com
- Yanıt Olarak İşaretleyen Serkan Bark 19 Mart 2012 Pazartesi 08:21
-
Merhaba,
Hmm sizin istediginiz UI tarafinda da ayni zamanda tasimak. Aslinda istediginiz tam SQL Server forumu icin uygun degil ama sorununuz cozulsun yaziyorum. Asagiya yazdigim code 'u incelemenizi isteyecegim. Notepad++ 'da derlemeyerek yazdim syntax hatasi olabilir. DataSet'iniz sizin DataAdaptorunuz. Bunu kullanarak direk state kontrolu yaparak gridview'de aktarilan verinin insert statement'ini alabilirsiniz. VB 'ye cevirip deneyebilirsiniz. SqlDataAdapter + DataRowState olarak biraz arastirirsaniz static insert statement'i yazmadan cozebilirsiniz.
System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter(); da.Fill(DataRowState) da.InsertCommand.CommandText Datagridview.DataSource = ds; DS.row[0].rowstate == Added
Kolay gelsin.
http://www.yigitaktan.com
- Yanıt Olarak İşaretleyen Serkan Bark 19 Mart 2012 Pazartesi 08:21
Tüm Yanıtlar
-
Merhaba,
Asagiya daha onceden yazdigim bi code'u sizin icin degistirerek ekliyorum. Oncesinde birde TabloKontrol diye bir tablo yaratmaniz gerekiyor. Silerken Tabloyu yormamak icin 2dk aralik vererek aktarilanlari siliyor.
IF NOT EXISTS (SELECT TOP(1) * FROM [TestDB].[dbo].[TabloA] WITH(NOLOCK) WHERE [Id] IN (SELECT [Id] FROM [PostaciOldOrders].[dbo].[TabloB] WITH(NOLOCK))) BEGIN INSERT INTO [PostaciOldOrders].[dbo].[TabloB] ( [Id], [Data] ) OUTPUT INSERTED.Id INTO [TestDB].[dbo].[TabloKontrol] (Id) ( SELECT [Id], [Data] FROM [TestDB].[dbo].[TabloA] WITH(NOLOCK) WHERE [Id] < 20000 ) END GO DECLARE @Tarih VARCHAR(50) DECLARE @Sayac INT SET @Sayac = 0 WHILE EXISTS (SELECT TOP(1) * FROM [TestDB].[dbo].[TabloA] WHERE [Id] IN (SELECT [Id] FROM [TestDB].[dbo].[TabloKontrol] WITH(NOLOCK))) BEGIN DELETE TOP(1000) FROM [TestDB].[dbo].[TabloA] WHERE [Id] IN (SELECT [Id] FROM [TestDB].[dbo].[TabloB] WITH(NOLOCK)) SET @Tarih = GETDATE() RAISERROR (@Tarih, 0, 1) WITH NOWAIT WAITFOR DELAY '00:02:00' SET @Sayac = @Sayac + ISNULL(@@ROWCOUNT,0) END GO IF NOT EXISTS (SELECT TOP(1) * FROM [TestDB].[dbo].[TabloKontrol] WITH(NOLOCK) WHERE [Id] IN (SELECT [Id] FROM [TestDB].[dbo].[TabloA] WITH(NOLOCK))) BEGIN TRUNCATE TABLE [TestDB].[dbo].[TabloKontrol] END GO
Kolay gelsin.
http://www.yigitaktan.com
- Yanıt Olarak İşaretleyen Serkan Bark 19 Mart 2012 Pazartesi 08:20
-
merhaba
kusura bakmayın ben bu konuda yeni olduğum için ve vb kullandığım için yazdıklarınızı kendi programıma uygulayamadım, yukarıdaki komutlara biraz açıklama yazmanız mümkün mü acaba?
mesela gridview de tıkladığım satırdaki veriyi taşı butonuna basarak öbür tabloya taşımak istiyorum,buna göre basit bir örnek bulabilir miyim?
benim sql komutlarım aşağıdaki gibi ,
Dim komut As SqlCommand = New SqlCommand("INSERT INTO merkez (çağrıno,marka,model) VALUES ('" + çağrıno.Text + "','" + txt_marka.Text + "','" + txt_model.Text + "')", baglantı)
iyi çalışmalar
-
Merhaba,
Hmm sizin istediginiz UI tarafinda da ayni zamanda tasimak. Aslinda istediginiz tam SQL Server forumu icin uygun degil ama sorununuz cozulsun yaziyorum. Asagiya yazdigim code 'u incelemenizi isteyecegim. Notepad++ 'da derlemeyerek yazdim syntax hatasi olabilir. DataSet'iniz sizin DataAdaptorunuz. Bunu kullanarak direk state kontrolu yaparak gridview'de aktarilan verinin insert statement'ini alabilirsiniz. VB 'ye cevirip deneyebilirsiniz. SqlDataAdapter + DataRowState olarak biraz arastirirsaniz static insert statement'i yazmadan cozebilirsiniz.
System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter(); da.Fill(DataRowState) da.InsertCommand.CommandText Datagridview.DataSource = ds; DS.row[0].rowstate == Added
Kolay gelsin.
http://www.yigitaktan.com
- Yanıt Olarak İşaretleyen Serkan Bark 19 Mart 2012 Pazartesi 08:21
-
-
-
merhaba
şimdilik olayın mantığını anlamak için aşağıdaki gibi bir şey yaptım ve çalıştı.
girdview ın tıklanma özelliğini kullanarak ve rowindex olayıyla seçtiğin satırdaki verileri zaten programımda mevcut olan textbox lara attım, oradanda insert into komutu ile diğer tabloya taşıdım, işim bitincede eski kayıtı ilk tablodan sildim. olayı görmek için ve kolay olsun diye şimdilik textboxlara attım fakat dataset ve datarow olayının kullanımını biraz daha öğrenebilirsem daha mantıklı bir çözüme ulaşabilirim diye düşünüyorum.
Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
Dim satirno As Integer
satirno = e.RowIndex
Label11.Text = DataGridView1.Rows(satirno).Cells(0).Value.ToString()
"
"
txt_çıkış.Text = DataGridView1.Rows(satirno).Cells(8).Value.ToString()
txt_açıklama.Text = DataGridView1.Rows(satirno).Cells(9).Value.ToString()
referans.Text = DataGridView1.Rows(satirno).Cells(10).Value.ToString()
End SubPrivate Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
Dim komut As SqlCommand = New SqlCommand("INSERT INTO tabloA (çağrıno,marka,model,referans,serino,macid,bölge,geliş_tarihi,çıkış_tarihi,açıklama) VALUES ('" + çağrıno.Text + "','" + txt_marka.Text + "','" + txt_model.Text + "','" + referans.Text + "','" + txt_serino.Text + "','" + txt_macid.Text + "','" + txt_bölge.Text + "','" + txt_geliş.Text + "','" + txt_çıkış.Text + "','" + txt_açıklama.Text + "')", baglantı)
- Yanıt Olarak İşaretleyen Serkan Bark 19 Mart 2012 Pazartesi 08:21
-
Merhaba,
Ilgili linkten solution'i cekip deneyebilirsiniz. Denemek icin DB 'de 2 adet tablo yaratin. ID ve DATA column isimleri olusturun. Iki tabloda da ID'leri identity olarak set edin. A ya data doldurun. B bos kalsin.
Tool su sekilde calisiyor; TabloA <-> TabloB ye gridview 'de datalari tasiyor. tasidigini tasidigi yerden silior. Once gridview 'den Row olarak secip Saga/Sola at diyin sonra kaydet diyin. VS2010 C# 'da build ettim.
Solution'i buradan cekebilirsiniz: http://www.2shared.com/file/qe0n1-jT/Yigit.html
Kolay gelsin.
http://www.yigitaktan.com
- Yanıt Olarak İşaretleyen Serkan Bark 19 Mart 2012 Pazartesi 08:21
-
-