Forum

DB den Diğer DB ye ...
 
Bildirimler
Hepsini Temizle

DB den Diğer DB ye tablo kopyalarken sorun yaşıyorum.

21 Yazılar
4 Üyeler
0 Likes
2,768 Görüntüleme
(@Anonim)
Gönderiler: 0
Konu başlatıcı
 

Merhaba;

Elimde var olan çalışır durumdaki Databasede bazı tabloları , yine aynı özelliklerdeki diğer databasenin boş olan tablosuna mevcut girdilerimi olduğu gibi aktarmak istiyorum,
Aktarım yaparken yine diğer DB de var olan aynı özelliklerdeki boş Tablo'ya yazsın istiyorum, yani karşı tarafta o tablo var fakat boş.
ikiside aynı serverde aynı alanda farklı db ler.
Burada yaşadığım sorun ise şudur, normal  Identity kolon olmayan tabloları aktarıyorum sorun yok fakat, Identity kolonlara identity yi On, Off yaptığım halde sorun yaşıyorum.
Ben alttaki Query yi 2-3 şekilde değiştirdim denedim olmadı, hatam konusunda yardımcı olursanız sevinirim.

SET IDENTITY_INSERT VT_ACCOUNT.dbo._ModuleVersion ON
INSERT INTO VT_ACCOUNT.dbo._ModuleVersion
SET IDENTITY_INSERT VT_ACCOUNT.dbo._ModuleVersion OFF
GO
SELECT * FROM [VT_ACCOUNT1].dbo._ModuleVersion

üstteki sorguda 2 ci SET e kırmızı Vurgu çekmiş oluyor şu hatayı alıyorum

Msg 156, Level 15, State 1, Line 5
Incorrect syntax near the keyword 'SET'.

(178 row(s) affected)

 
Alttaki şekilde deneyince ise

SET IDENTITY_INSERT VT_ACCOUNT.dbo._ModuleVersion ON
INSERT INTO VT_ACCOUNT.dbo._ModuleVersion
SELECT * FROM [VT_ACCOUNT1].dbo._ModuleVersion
SET IDENTITY_INSERT VT_ACCOUNT.dbo._ModuleVersion OFF
GO

 
Msg 8101, Level 16, State 1, Line 3
An explicit value for the identity column in table 'SRO_VT_ACCOUNT.dbo._ModuleVersion' can only be specified when a column list is used and IDENTITY_INSERT is ON.
hatasını veriyor

 
Not:DB  VT_ACCOUNT1 veritabanındaki dolu tabloyu, VT_ACCOUNT da var olan boş tabloya aktarmak istiyorum.

Desteğiniz için şimdiden teşekkür ederim.

 
Gönderildi : 19/06/2012 14:55

(@kenanilgun)
Gönderiler: 544
Üye
 

Burada "SET IDENTITY_INSERT VT_ACCOUNT.dbo._ModuleVersion ON" kısmını ne için kullanıyorsunuz on,off yaparak ve identity üzerine ne tür bir mantık yürütüyorsunuz açıklıyabilir misiniz?

 
Gönderildi : 19/06/2012 15:05

(@kenanilgun)
Gönderiler: 544
Üye
 

Bu arada trigger de kullanabilirsiniz bu konu ile ilgili böyle bir çalışma yapmayı düşündünüz mü?

 
Gönderildi : 19/06/2012 15:06

(@Anonim)
Gönderiler: 0
Konu başlatıcı
 

Tabloda otomatik artan kolon var, ve karşı tarafında yapısı aynı, On,
Off yapmamdaki amacım bu kolona mevcut kolon kayıtlarını insert
edebilmek.

Trigger konusunda malesef pek fazla bilgim yok, ondan dolayı düşündüm dersem yanlış olur.

 
Gönderildi : 19/06/2012 15:12

(@kenanilgun)
Gönderiler: 544
Üye
 

Trigger işlemlerini 
http://www.cozumpark.com/forums/thread/166982.aspx  adresinde Barış bey anlatmış isterseniz bir inceleme yapın bu konu ile ilgili kayıtlarınızın öneminin ne kadar olduğunu tam olarak kestiremiyorum. Burada verilerin önemi yüksekse tabiki farklı şekillerde de kontrol altında tutulabilir duruma getirebilir aslında. İsterseniz konuyu biraz inceleyin üstüne tartışalım Polat bey. İyi çalışmalar.

 
Gönderildi : 19/06/2012 15:52

(@Anonim)
Gönderiler: 0
Konu başlatıcı
 

Verdiğiniz konuyu şimdi okuyacağım fakat öncesinde şunu belirtmek istiyorum.

bu aktarım işlemini ben bir defaya mahsus yapacağım, sürekli ihtiyaç duyduğum bir işlem değil.

ve aktarımdan sonra eski db ilede işim kalmayacak sileceğim.

 
Gönderildi : 19/06/2012 16:52

(@kenanilgun)
Gönderiler: 544
Üye
 

O halde triggeri rahatlıkla kullanabilirsiniz. Yardımcı olabileceğim farklı konu olursa devam ederim. İyi çalışmalar.

 
Gönderildi : 19/06/2012 16:57

(@Anonim)
Gönderiler: 0
Konu başlatıcı
 

Kenan Bey, Sanırım trigger işlemi ile (yeni olduğumdan olabilir) istediğimi yapamayacağım, benim istediğim basitçe şudur, a nolu db deki artan kolon içeren yani IDENTITY içeren tabloyu b nolu db deki aynı isim ve şekildeki boş tabloya hata almadan aktarmak veya kopyalamak.

 bunu basitçe şu şekilde yapabiliyorum

 USE VT_TEST
SELECT * INTO VT_TEST2.dbo._kopyalanan
FROM _kopyalanan

 fakat bu Query diğer tarafa kendisi tabloyu oluşturup aktarıyor var olana yazmıyor,

 Veya bu şekilde IDENTITY içermeyen tablo içeriğini aktarıyorum

USE VT_TEST
INSERT INTO _kopyalanan1 (kolon1, kolon2)
SELECT kolon1, kolon2
FROM _kopyalanan

fakat ben var olan boş ve kolonları hazır tabloya aktarmak istiyorum, sadece IDENTITY içeren tabloyu hata almadan kapyalamak istiyorum diğer db ye.

 
Gönderildi : 19/06/2012 17:23

(@kenanilgun)
Gönderiler: 544
Üye
 

Polat bey aşağıdaki linkten ulaşabilirsiniz bir döküman hazırladım. İyi çalışmalar.

https://docs.google.com/open?id=0B-4LfaCX5TC9X1FUenQ4U3k0Z0E

 
Gönderildi : 19/06/2012 18:11

(@Anonim)
Gönderiler: 0
Konu başlatıcı
 

Çok teşekkür ederim fakat olmadı, ben size sorguyu veriyorum hatam varsa yazarsanız sevinirm

CREATE TRIGGER [dbo].[trigger_newinsert]
ON [dbo].[_ModuleVersion]
AFTER INSERT
AS
BEGIN
INSERT INTO [VT_ACCOUNT].[dbo].[_ModuleVersion] SELECT
* FROM inserted
END
GO

 

Verdiği  HATA

Msg 8101, Level 16, State 1, Procedure trigger_newinsert, Line 6
An explicit value for the identity column in table 'SRO_VT_ACCOUNT.dbo._ModuleVersion' can only be specified when a column list is used and IDENTITY_INSERT is ON.
 
Altta tablo yapısı var
qery yi uyararsak aktarmam gereken yaklaşık 20 ye yakın tablo olacak.

 

 
Gönderildi : 19/06/2012 20:22

(@kenanilgun)
Gönderiler: 544
Üye
 

Burada yaptığınız hata identity olan kısımları diğer tabloda çakıştırmanız. 

Hatalı kısım ;
INSERT INTO [VT_ACCOUNT].[dbo].[_ModuleVersion] SELECT * FROM inserted

 Burada her sütunu tek tek yazarak deneyebilirmisin. 
VT_ACCOUNT  tablosundaki identity olan kısmı almayın. Aynı şekilde _ModuleVersion tablosundaki identity kısmınada gelmemesi lazım bir sütun ilede deniyebilirsiniz.

Örnek;
INSERT INTO [VT_ACCOUNT].[dbo].[_ModuleVersion](nDivisionID) SELECT nDivisionID FROM inserted 
Şeklinde deneyebilirmisiniz. Not :  _ModuleVersion tablosunda zorunlu sütunlar var ise ondanda problem yaşıyabilirsiniz.

 

 
Gönderildi : 20/06/2012 01:40

(@Anonim)
Gönderiler: 0
Konu başlatıcı
 

Burada yaptığınız hata identity olan kısımları diğer tabloda çakıştırmanız. 

Hatalı kısım ;
INSERT INTO [VT_ACCOUNT].[dbo].[_ModuleVersion] SELECT * FROM inserted

 Burada her sütunu tek tek yazarak deneyebilirmisin. 
VT_ACCOUNT  tablosundaki identity olan kısmı almayın. Aynı şekilde _ModuleVersion tablosundaki identity kısmınada gelmemesi lazım bir sütun ilede deniyebilirsiniz.

Örnek;
INSERT INTO [VT_ACCOUNT].[dbo].[_ModuleVersion](nDivisionID) SELECT nDivisionID FROM inserted 
Şeklinde deneyebilirmisiniz. Not :  _ModuleVersion tablosunda zorunlu sütunlar var ise ondanda problem yaşıyabilirsiniz.

 

identity olmayan kısmı alırken sorun yok, o şekilde alıyorum fakat benim identity  alanlarınıda almam gerekiyor, nID bir başka tabloda yine kullanılıyor ve karşılaştırılıyor çünkü,
O kolonu almadan aktarırsam, diğer satırlar için otomatik sayi üretecek ve buda şayet 1 tek satırda sapma dahi olsa soruna yol açacaktır.

 
Gönderildi : 21/06/2012 04:46

(@kenanilgun)
Gönderiler: 544
Üye
 

O halde şu şekilde bir işlem yapmanız lazım ikinci tablonuzda identity oluşturmuyacaksınız nID kısmı identity özelliği kapatarak sadece index özelliğini açıcaksınız. İlk tablonuzdaki nID sütunu ikinci tablonuzdaki nID tablonuza girişi yapacaksınız. Burada ikinci tabloya geçen verilerin mükerrer olma şansı tabi olur ki triggerte sanmıyorum o kadar risk olacağını. Sonuç olarak identity yi açıp kapatarak zaten ikinci tabloya nID leri girmeye çalışıyordunuz önceki mantığınızda.

 
Gönderildi : 21/06/2012 13:44

(@Anonim)
Gönderiler: 0
Konu başlatıcı
 

Kenan Bey;

DB ve Tablo hazır bir tablo, ben oluşturmuyorum, yapı olarak zaten boş şekilde ve kolonları yapılı duruyor 2 ci tablo, ben aktarırken, var olan identity li kolondan, yine karşıda var olan idendity li kolona yazmam lazım
El ile manuel olarak 2ci tablodaki idendity kolonunun idendity özelliğini kaldırmak istediğimde save yapmıyor nedese, kolonun özelliğini değiştiremedim yani.

 
Gönderildi : 22/06/2012 22:10

(@kenanilgun)
Gönderiler: 544
Üye
 

SQL Server yeni kurulumlarından sonra oluşturulan tabloları değiştirebilmek için "Prevent saving changes that require table re-creation" özelliğini kapatmanız gerekmektedir.

 Tools > Options > Designers >  Prevent saving changes that require table re-creation kısmından kaldırdıktan sonra işleminizi tekrar deneyiniz.

 
Gönderildi : 23/06/2012 13:06

(@isaKARA)
Gönderiler: 16
Eminent Member
 

polat33 Merhaba

Sanırım sende benim gibi Sro için çabalıyorsun 🙂

Bu ne için lazım olucak sana ne için istiyorsun onu yazabilirsen sana alternatif çözüm söyleyebilirim. 

 
Gönderildi : 23/06/2012 17:33

(@kenanilgun)
Gönderiler: 544
Üye
 

Sro Derken Silkroad mı ?

 
Gönderildi : 23/06/2012 18:44

(@isaKARA)
Gönderiler: 16
Eminent Member
 

Evet.

 
Gönderildi : 24/06/2012 00:46

(@Anonim)
Gönderiler: 0
Konu başlatıcı
 

İsa Bey Merhaba;

 Evet Söz konusu database silkroad databasesi, fakat ben sunucu hizmeti demeyeyimde, desteği veriyorum ve sürekli database çökmeleri gibi hatalar alıyoruz, şikayetler alıyoruz, o durumda kişiye tutupda al sana yedeğin dediğimizde çok da işine yaramıyor, çünkü mevcut veirleri yok olmuş oluyor, fakat var olan sorunlu databasesindeki bilgileri identity ler ile beraber aktarma gibi bir şansımız olursa , o zaman alternatif çözüm üretmiş oluruz ve kişi emek kaybına uğramaz.

bu işlem daha çok user bilgilerini ve hesaplarını olduğu gibi başka bir db ye geçirmek için lazım, veya bozulan db yi yedek db ye aktarmak için.

 Alternatif çözümünüzü merak ettim.

 
Gönderildi : 24/06/2012 04:33

Sayfa 1 / 2
Paylaş: