C#nedir?com Homepage
Forum Home Forum Home > Veritabanları > SQL Server
  New Posts New Posts RSS Feed - Tüm Kayıtları tek satırda çekmek?
  FAQ FAQ  Forum Search   Events   Register Register  Login Login

Tüm Kayıtları tek satırda çekmek?

 Post Reply Post Reply
   

Author
Message
ofaruk_k View Drop Down
Groupie
Groupie


Joined: 03 Mart 2007
Status: Offline
Points: 151
Post Options Post Options   Thanks (0) Thanks(0)   Quote ofaruk_k Quote  Post ReplyReply Direct Link To This Post Topic: Tüm Kayıtları tek satırda çekmek?
    Posted: 23 Ekim 2009 at 11:18
Merhaba arkadaşlar,
SQL Server 2005'de kayıtları çekerken tek satır olarak dönmesini istiyorum.
Örneğin şu tabloyu:
ID    AD
1     Ahmet
2     Mehmet
3     Ali

Bu tabloda verileri çekerken AD tablosunu tek satırda almak istiyorum. AhmetMehmetAli ya da Ahmet,Mehmet,Ali şeklinde gibi.

Stored Procedure ile önce gecici bir tablo oluşturmayı sonra hepsini teker teker değişkene atayıp tek sonuç döndürmeye çalıştım ama yapamadım. Acaba böyle birşeyi nasıl yapabiliriz?
Back to Top
yesilvadi View Drop Down
Groupie
Groupie


Joined: 23 Ocak 2007
Status: Offline
Points: 151
Post Options Post Options   Thanks (0) Thanks(0)   Quote yesilvadi Quote  Post ReplyReply Direct Link To This Post Posted: 23 Ekim 2009 at 14:16
select ad + ', ' from detaytabloAdi as detay FOR XML PATH('')

Back to Top
anda_pro View Drop Down
Senior Member
Senior Member


Joined: 31 Mart 2007
Status: Offline
Points: 341
Post Options Post Options   Thanks (0) Thanks(0)   Quote anda_pro Quote  Post ReplyReply Direct Link To This Post Posted: 23 Ekim 2009 at 16:48
Sonucu bir varchar tipinde bir değişken olarak almak istersen aşağıdaki gibi bir sorgu kullanabilirsin.
 
DECLARE @Sonuc VARCHAR(1000)
SET @Sonuc = ''
 
CREATE TABLE #TABLO(ID INT, Ad VARCHAR(25))
 
INSERT INTO #TABLO VALUES(1,'Ahmet')
INSERT INTO #TABLO VALUES(2,'Mehmet')
INSERT INTO #TABLO VALUES(3,'Ali')
 
SELECT @Sonuc = @Sonuc +(CASE @Sonuc WHEN '' THEN '' ELSE ', ' END)+ Ad FROM #TABLO
SELECT @Sonuc AS Adlar
 
DROP TABLE #TABLO
Back to Top
ofaruk_k View Drop Down
Groupie
Groupie


Joined: 03 Mart 2007
Status: Offline
Points: 151
Post Options Post Options   Thanks (0) Thanks(0)   Quote ofaruk_k Quote  Post ReplyReply Direct Link To This Post Posted: 23 Ekim 2009 at 16:53
Cevap için çok teşekkürler. Tek satırda işimi gördü :)

İyi çalışmalar, Kolay Gelsin...
Back to Top
ofaruk_k View Drop Down
Groupie
Groupie


Joined: 03 Mart 2007
Status: Offline
Points: 151
Post Options Post Options   Thanks (0) Thanks(0)   Quote ofaruk_k Quote  Post ReplyReply Direct Link To This Post Posted: 23 Ekim 2009 at 16:55
@anda_pro
Cevap yazarken senin cevabını görmemiştim.

DECLARE @ad varchar(max)
SELECT @ad = @ad + ',' + ad FROM TABLOM

veya @yesilvadi'nin dediği gibi
select ad + ', ' from detaytabloAdi as detay FOR XML PATH('')

yapınca oldu.

İlginiz için çok teşekkürler, Kolay Gelsin...
Back to Top
ofaruk_k View Drop Down
Groupie
Groupie


Joined: 03 Mart 2007
Status: Offline
Points: 151
Post Options Post Options   Thanks (0) Thanks(0)   Quote ofaruk_k Quote  Post ReplyReply Direct Link To This Post Posted: 01 Mayıs 2010 at 15:25
Merhaba arkadaşlar
Yeni konu açmamak için buraya devam ediyorum. Yukarıda kullandığım yöntem gayet güzel çalışıyordu. Ta ki dün aynı tabloya 20bin yeni kayıt ekleninceye kadar. Şuanda 35.000 kayıt var toplam. 35.000 ismi tek satırda çekmeye çalışınca sonuç gelmiyor malesef. 6 dk bekledim Management Studio'da, sonra da sorguyu iptal ettim. 15.000 kayıt varken maks. 20 sn'de cevap dönüyordu.
* Acaba 35.000 kaydı tek seferde almanın bir yolu var mıdır?
* Ya da parça parça çekebilir miyim? (0-10bin; 10bin-20bin; vs.)

Back to Top
ofaruk_k View Drop Down
Groupie
Groupie


Joined: 03 Mart 2007
Status: Offline
Points: 151
Post Options Post Options   Thanks (0) Thanks(0)   Quote ofaruk_k Quote  Post ReplyReply Direct Link To This Post Posted: 02 Mayıs 2010 at 09:25
Merhabalar,

Son olarak FETCH denedim ve oldu çok şükür :)
2 şekilde denedim.

1) FETCH ile print yaptım, fakat bu şekilde C# tarafında gelen metin kolon ve satır şeklinde gelmedi. Uyarı mesajı gibi dönüyordu. Bende aşağıdaki gibi uyarı mesajını aldım. 30.000 kayıt 3 sn sürdü.
Kod:

MYSqlConnection.InfoMessage += new SqlInfoMessageEventHandler(UyariyiOkuFonksiyonu);

2) Yine FETCH ile verilere satır satır erişirken varchar nesnesine isimleri atadım.
Ancak bu sefer işlem oldukça yavaşladı. 30.000 kayıt 24-25 sn sürdü.

İyi çalışmalar
Back to Top
birsentuncyazar View Drop Down
Newbie
Newbie


Joined: 02 Mart 2009
Status: Offline
Points: 6
Post Options Post Options   Thanks (0) Thanks(0)   Quote birsentuncyazar Quote  Post ReplyReply Direct Link To This Post Posted: 03 Mayıs 2010 at 11:38
Tabloya hiç index vermemiş olabilir misiniz?

SQL Server Management Studio'da,  Tools -->  "Database Engine Tuning Advisor" isimli bir tool var.
Burayı açıp, sql sorgundaki tabloları seçip, sql kodunu yazdıktan sonra Start Analysis ile kod analizini yapabilir hatta index / statistics önerileri için hazır sql kodları bulabilirsiniz.


Back to Top
 Post Reply Post Reply
  Share Topic   
   


Forum Jump Forum Permissions View Drop Down

Forum Software by Web Wiz Forums® version 11.01
Copyright ©2001-2014 Web Wiz Ltd.