Excel Verilerinin SQL Server a Aktarımı Nasıl Yapılabilir?

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
thickreed
Üye
Mesajlar: 9
Kayıt: 12 Nis 2005 06:30
Konum: ANKARA

Excel Verilerinin SQL Server a Aktarımı Nasıl Yapılabilir?

Mesaj gönderen thickreed »

Herkese Merhabalar,

Excel Verilerinin SQL Server a Aktarımı Nasıl Yapılabilir? Daha doğrusu şuan yürütmekte olduğum projede (Sendika Üye Otomasyonu) SQL Server 2000 kullanıyorum. Proje bitti fakat son anda kullanıcılardan "Üyelerimizin Aidat Ödemeleri bize bi excel tablosu halinde zaten geliyor.Biz Excel tablosunu programa dahil edebilir miyiz?" gibi istekleri oldu. Bunu Delphi den yaptım. Fakat Verileri alan Query (örneğin 7000 kayıt) verileri alırken çok yavaş davranıyor(2-3 dk gibi). Bu işlemi SQL Server da manuel olarak yaptırdığımda çok hızlı oluyor. Sonuç olarak SQL Server bunu yaparken bi SQL komutu kullanıyor ve öyle işlem yapıyor. Araştırmalarıma rağmen pek başarılı olamadım. SQL Server ın Excel verisini almak için kullandığı SQL Komutunu yada bu işin mantığını bilen varsa yardımını acil olarak rica ediyorum.

Herkese teşekkürler.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7602
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

:ara sql server import
:ara sql server excel
:ara enterprise manager

gelen sonuçlardan birkaçını inceleyerek sonuca gidebilirsiniz. İlk aramada birkaç şey buldum mesela.

Kolay gelsin.
thickreed
Üye
Mesajlar: 9
Kayıt: 12 Nis 2005 06:30
Konum: ANKARA

Mesaj gönderen thickreed »

Tekrar Merhabalar,

Mustafa Hocam ilginize çok teşekkür ederim.

sql server import
sql server excel
enterprise manager

gibi seçeneklerinizi aradım ve dediğiniz gibi bir sürü sonuç buldum. Fakat bunların çoğu Delphi üzerinden veriyi çekiyolar. Ben SQL Server da bu işi yapan bi SQL komutunun olabileceğini zannediyorum. Varsa da incelediğim örneklerde göremedim. Daha öncede dediğim gibi "ATTACH DATABASE" yada "BACKUP DATABASE" komutları gibi işte atıyorum "IMPORT_EXCEL_DATAS" yada benzer bi komutu SQL Server ın kullandığını zannediyorum.Çünkü manuel bu işi yapıyor.Bu komutu yada komutlar grubunu arıyorum.

Bu hususta bi dostum SQL Server da bi "Job" tanımlamamı ve daha sonra bu "job" ın SQL ine baktığım takdirde orada bulabileceğimi söyledi. Fakat JOb tanımlamakta sıkıntı çektim, işin aslı beceremedim.

Bu hususta başka bir fikriniz varsa yada yardım edebilirseniz sevinirim.


Kolay gelsin.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7602
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

SQL Server'ın çok gelişmiş import/export tool'u var. Database'e sağ tıkla, seçeneklerden import'u bul. Orda zaten sihirbaz seni yönlendirecek.

Şu an SQL Server kurulu olmadığı için tam seçenekleri söyleyemiyorum maalesef. Ama birkaç deneme ile çözersin.

NOT : yedek almayı unutma :)

Kolay gelsin.
thickreed
Üye
Mesajlar: 9
Kayıt: 12 Nis 2005 06:30
Konum: ANKARA

Mesaj gönderen thickreed »

Merhaba mussimsek hocam;

"SQL Server'ın çok gelişmiş import/export tool'u var. Database'e sağ tıkla, seçeneklerden import'u bul. Orda zaten sihirbaz seni yönlendirecek."
demişsiniz.

SQL Server ın bu sihirbazını biliyorum ve birçok kere projelerim dahilinde veri aktarımı yaparken kullandım. Fakat bunu ben yapmıyacam, kulanıcı benim delphide yazdığım arayüzden bu aktarım işlemini yapacak.

Ama gene de insanın kendisine yardımcı olan birilerinin varlığını bilmesi güzel his doğrusu. Herşey için teşekkür ederim.

Bu hususta bana söylenen başka bi tavsiyeyi sizinle ve tüm forumdaki arkadaşlarla paylaşmak isterim.

Tavsiye şuydu;

Enterprise yi aç. import sihirbazında son noktaya gel ama "SON" u tıklama.SQL Server Profiler ı çalıştır. Sonra enterprise dönüp import işlemini başlat. Böylelikle Profiler de SQL Server ın kullandığı komutları gözlemleyebilirsin.

dendi ve bende öyle yaptım. Bana Profiler dan dönen 5 satırlık değerler şunlardı:

1)
exec sp_oledb_ro_usrname

2)
select collationname(0x1F04D00082)

3)
CREATE TABLE [UYE_TAKIP].[dbo].[Sayfa1$] (
[SICIL_NO] nvarchar (255) NULL,
[BRUT_UCRETI] float NULL,
[KESINTI_YUZDESI] float NULL,
[AIDAT_TUTARI] float NULL
)

4)
exec sp_bcp_dbcmptlevel [UYE_TAKIP] SET FMTONLY ON SELECT * FROM [UYE_TAKIP].[dbo].[Sayfa1$] SET FMTONLY OFF exec [UYE_TAKIP]..sp_tablecollations '[UYE_TAKIP].[dbo].[Sayfa1$]'

5)
insert bulk [UYE_TAKIP].[dbo].[Sayfa1$]("SICIL_NO" nvarchar(255) COLLATE SQL_Latin1_General_CP1254_CI_AS,"BRUT_UCRETI" float,"KESINTI_YUZDESI" float,"AIDAT_TUTARI" float)with(check_constraints)

şimdi bu adımları sırayla inceleyecem ki sonuca ulaşacağımı umuyorum.

Sanırım SQL Server bu işi yaparken sp_oledb_ro_usrname, sp_bcp_dbcmptlevel gibi stored procedurlerini kullanıyo.

Şimdi bunları inleyeceğim.

Herkese kolaylıklar diliyorum.
Kullanıcı avatarı
emrahkaraarslan
Üye
Mesajlar: 243
Kayıt: 21 Haz 2005 12:28
Konum: Trabzon

Mesaj gönderen emrahkaraarslan »

exceldeki verileri internette bulabileceğin bir convertewr programla access e çevirip daha sonra sql serverdan import etmeni tavsiye ederim bence direk excel kullanma bazen sorunlar çıkarabiliyor
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

merhaba thickreed. bu işi çözersen nasıl çözdüğünü yazarsan faydalı olacağına inanıyorum. çünkü bende bu konuda tablo aktarımlarında baya bir süre beklemem gerekiyor.. kolay gelsin...
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Enterprise Manager arka planda sqlbulkoperations ile apileri kullanarak bir şeyler yapıyor ama hadi hayırlısı. Tahminime göre ram üzerinde bilgileri oluşturup bunları aktarıyor. Bu tamamen safsata da olabilir ama bu konuda bilgi sahibi olan varsa ve destek olursa süper olacak.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Excel dosyasındaki bilgiyi satır satır okuyarak bir string gride aktarın.
daha sonra bu gridden döngü ile ilgili tabloya insert etseniz olmazmı?
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Aralarındaki hız farkı korkunç boyutlarda. Bulk Insert metodu sql server'a yapılacak en hızlı kayıt tekniği. Olmazsa ya sabır denilerek yapılır ama maksat bulk insert tekniğini açığa çıkarmak. Bir DB onarma aracı için gerekli olduğundan lazım. Trigger disable olmadan 2 saat süren bir aktarım trigger kapatılarak 15 dk.'ya düşebiliyor. Bulk insertle ise 1 dk bile sürmeden işlem bitebiliyor. Bu yüzden bu konuyu zorlamak gerekiyor diye düşünüyorum.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
freett
Üye
Mesajlar: 29
Kayıt: 01 Mar 2004 05:18
Konum: ANTALYA

Mesaj gönderen freett »

hocam tek sql cümlesi yeter bunun için (MS SQL için tabi bu) excel dosyadanki tüm alanları senin oluşturacağın tabloya aktaracak

Kod: Tümünü seç

SELECT * INTO ExcelTablo FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=C:\test\xltest.xls;Extended Properties=Excel 8.0')...[Sayfa1$]
talip türkmen
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

Mesaj gönderen bgoktas »

Merhaba,
Eğer sql server 2000 veya 7 kullanıyorsanıs dts(data transformation services) diye bir şey var. dts ile aktarımı çok rahat yapabilirsiniz. Hata scheduler özelliği ile belli periyotlarda veri aktarımı yapılabilir.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

freett yazdı:hocam tek sql cümlesi yeter bunun için (MS SQL için tabi bu) excel dosyadanki tüm alanları senin oluşturacağın tabloya aktaracak

Kod: Tümünü seç

SELECT * INTO ExcelTablo FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=C:\test\xltest.xls;Extended Properties=Excel 8.0')...[Sayfa1$]
Resim
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Cevapla