Sql select bİrlestİrmeALTER PROC [dbo].[CHAIN2] @ID INT AS DECLARE @D_NUM VARCHAR(20) SET @D_NUM=NULL DECLARE @DONGU INT SET @DONGU=0 BEGIN IF (@ID IS NULL) OR (@ID='') SELECT 'ID NULL' ELSE BEGIN IF EXISTS(SELECT
Konu bigFreeze tarafından açılmış, 239 kişi tarafından görüntülenip, 10 yanıt almış.
|
Özel Yazılım Trojan+, güncellemeli ve garantili. Sadece 690TL! Kredi kartınıza 12 taksit kolaylığı!
|
|||||||
Sql select bİrlestİrme konusundaki toplam yorum: 10, okunma sayısı: 239. |
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
#1 |
|
Cool Üye
![]() ![]() ![]() Kayıt Tarihi: Apr 2006
Üye numarası: #64796 Yer: aydın ve girne
Mesaj sayısı: 129
Karma etkisi: 19
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Karma: 1229
|
Kod:
ALTER PROC [dbo].[CHAIN2]
@ID INT
AS
DECLARE @D_NUM VARCHAR(20)
SET @D_NUM=NULL
DECLARE @DONGU INT
SET @DONGU=0
BEGIN
IF (@ID IS NULL) OR (@ID='')
SELECT 'ID NULL'
ELSE
BEGIN
IF EXISTS(SELECT * FROM DOCUMENT WHERE REPLIED_DOC_NUMBER=(SELECT DOC_NUMBER FROM DOCUMENT WHERE DOC_ID=@ID))
BEGIN
SELECT D.CLASS_OF_DOC,D.TYPE_OF_DOC,D.TITLE_OF_DOC,D.DOC_DATE,D.AUTHOR,D.DOC_NUMBER,D.REPLIED_DOC_NUMBER,L.FILE_NO,L.ROOM_NO,L.SHELF_NO,L.BORROWER,S.ARRIVAL_DATE,S.SUBMITTED_BY,S.SUBMITTED_TO,S.SUBMITTER_BRANCH,S.SUBMITTED_BRANCH
FROM DOCUMENT D,SUBMISSIONAL S, ******** L
WHERE D.DOC_ID=@ID AND D.DOC_ID=S.DOC_ID AND S.DOC_ID=L.DOC_ID
SET @D_NUM=(SELECT DOC_NUMBER FROM DOCUMENT WHERE DOC_ID=@ID)
WHILE (@DONGU=0)
BEGIN
SELECT D.CLASS_OF_DOC,D.TYPE_OF_DOC,D.TITLE_OF_DOC,D.DOC_DATE,D.AUTHOR,D.DOC_NUMBER,D.REPLIED_DOC_NUMBER,L.FILE_NO,L.ROOM_NO,L.SHELF_NO,L.BORROWER,S.ARRIVAL_DATE,S.SUBMITTED_BY,S.SUBMITTED_TO,S.SUBMITTER_BRANCH,S.SUBMITTED_BRANCH
FROM DOCUMENT D,SUBMISSIONAL S, ******** L
WHERE REPLIED_DOC_NUMBER=@D_NUM AND D.DOC_ID=L.DOC_ID AND L.DOC_ID=S.DOC_ID
SET @D_NUM=(SELECT DOC_NUMBER FROM DOCUMENT WHERE REPLIED_DOC_NUMBER=@D_NUM)
IF NOT EXISTS(SELECT * FROM DOCUMENT WHERE REPLIED_DOC_NUMBER=@D_NUM )
BREAK
END
END
ELSE
SELECT 'BU DOSYANIN ZINCIRI YOK'
END
END
Arkadaşlar hoca derste proje olarak bize Documet Mang. projesi verdi. Ben projenin SQL kısmıdan sorumluyum. Database in büyük bir çoğunluğunu hallettim ama yukardaki SP de takıldım. SP aslında düzgün çalışıyor ama while ın içindeki select komutu yüzünden ekrandaki tablolar ayrı ayrı görünüyor. Bu tabloları birleştirmek için bana önerebileceğiniz bir yöntem varmı? |
|
|
|
|
|
#2 |
|
Forum Kalfası
![]() ![]() ![]() ![]() Kayıt Tarihi: Oct 2008
Üye numarası: #268608 Yer: Bakırköy
Mesaj sayısı: 1,868
Karma etkisi: 3755
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Karma: 375073
|
UNION yada INNERJOIN işini görür.
|
|
|
|
|
|
#3 |
|
Cool Üye
![]() ![]() ![]() Kayıt Tarihi: Apr 2006
Üye numarası: #64796 Yer: aydın ve girne
Mesaj sayısı: 129
Karma etkisi: 19
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Karma: 1229
|
union galiba işe yaramıyor. select komutları arka arkaya olmadıkları için sanırım. join işlemini nasıl yapabilirim. burda komutlar while içinde sürekli dönüyor. Fikir için faydası olurmu bilmem ama yukarıdaki SP document mag. sys. deki zincir yöntemi. Birbiriyle bağlantılı dosyaları sıralıyor. Yani iki kişi arasındaki postaların sıralanması gibi.
|
|
|
|
|
|
#4 |
|
Forum Kalfası
![]() ![]() ![]() ![]() Kayıt Tarihi: Oct 2008
Üye numarası: #268608 Yer: Bakırköy
Mesaj sayısı: 1,868
Karma etkisi: 3755
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Karma: 375073
|
Bu tür işlemleri server side kodlama tarafında daha rahat yapabilirsin.
Innerjoin örneği : Select * from table_x where id in (Select id from table_y) parantez içindeki sorgu while içinde dönebilir. ilk sql sorgusu while'ı kapsayacak. Kaynak: Wardom http://www.wardom.com.tr/showthread.php?t=518294 bana sorarsan pl/sql taraflı değişde serve side kod yazmak daha iş görür her şekilde manupile edebilirsin. SP taraflı yarın detaylı bir göz atarım koda. İyi geceler. |
|
|
|
|
|
#5 |
|
Cool Üye
![]() ![]() ![]() Kayıt Tarihi: Apr 2006
Üye numarası: #64796 Yer: aydın ve girne
Mesaj sayısı: 129
Karma etkisi: 19
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Karma: 1229
|
açıkcası server side konusunda tambir bilgimyok. Arayüz olark c# kullanıyoruz. sorunu burdan halledebilirmiyiz. "while içinde dönebilir" dediğiniz kısmı anlayamadım. where içinde ayrıca birde while mı kullanıcaz yada böyle bişey mümkünmü?
Bu sorgular sonucunda tam olarak ekranda görmek istediğim şeye örnek vericek olursam bunun gibi bişey; DOC_ID-----------DOC_NUMBER----------REPLIED_DOC_NUMBER Kaynak: Wardom http://www.wardom.com.tr/showthread.php?t=518294 10-------------------------1A-------------------------NULL 20-------------------------5A-------------------------1A 12-------------------------3A-------------------------5A 40-------------------------4A-------------------------3A bu 4 dosya birbirine bu şekilde bağlı Düzenleyen bigFreeze : 31-12-2011 at 02:07. Sebep: düzeltme |
|
|
|
|
|
#6 |
|
Forum Kalfası
![]() ![]() ![]() ![]() Kayıt Tarihi: Oct 2008
Üye numarası: #268608 Yer: Bakırköy
Mesaj sayısı: 1,868
Karma etkisi: 3755
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Karma: 375073
|
C# kısmında çok daha rahat bir şekilde halledilebilir. T-SQL ' e göre daha esnek bir yapı.
Tablolarınızı ve bu tablolardan hangi verileri hangi koşul ile almak istiyorsanız yazarsanız. C# kodunu yazabilirim. |
|
|
|
|
|
#7 |
|
Cool Üye
![]() ![]() ![]() Kayıt Tarihi: Apr 2006
Üye numarası: #64796 Yer: aydın ve girne
Mesaj sayısı: 129
Karma etkisi: 19
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Karma: 1229
|
TABLES=DOCUMENT,L_O_C_ATION,SUBMISSIONAL
DOCUMENT=CLASS_OF_DOC,TYPE_OF_DOC,D.TITLE_OF_DOC,D .DOC_DATE,AUTHOR,DOC_NUMBER,REPLIED_DOC_NUMBER LOCAT_I_O_N=FILE_NO,ROOM_NO,SHELF_NO,BORROWER SUBMISSIONAL=ARRIVAL_DATE,SUBMITTED_BY,SUBMITTED_T O,SUBMITTER_BRANCH,SUBMITTED_BRANCH YUKARIDA VERDİĞİM DEĞERLERİ CEKİP EKRANDA GÖRMEM GEREKİYOR. DOC_ID-----------DOC_NUMBER----------REPLIED_DOC_NUMBER 10-------------------------1A-------------------------NULL 20-------------------------5A-------------------------1A 12-------------------------3A-------------------------5A 40-------------------------4A-------------------------3A MESELA BİZE "DOC_NUMBER"I "1A" OLAN BİDEĞER GİRİLDİ. BİZ BU "DOC_NUMBER"A SAHİP DOSYAYI VE BU DOSYANIN CEVABINI GÖSTERİYORUZ. BİR DOSYANIN CEVABI OLDUĞUNU NASIL ANLIYORUZ? DIGER DOSYALARIN "REPLIED_DOC_NUMBER"I CEVAPLANAN DOSYANIN "DOC_NUMBER"INA EŞİT OLUCAK. BU ŞEKİLDE BİR DÖNGÜ OLUŞMASI GEREKİYOR. . Normalde bunu bu şekilde sp yaptım ama c# dataGridView e gönderemiyoruz. sanırım sp de birden fazla sonuc döndüğü için ekranda görünmüyor. C# da bunu birleştirmenin bir yolu varmı yada bu şekilde görüntülenebilirmi? Kaynak: Wardom http://www.wardom.com.tr/showthread.php?t=518294 YARDIMLARINIZ İÇİN ÇOK TEŞEKKÜREDERİM İYİ GECELER Düzenleyen bigFreeze : 31-12-2011 at 03:08. Sebep: YILDIZ DÜZELTMESİ |
|
|
|
|
|
#8 |
|
Forum Kalfası
![]() ![]() ![]() ![]() Kayıt Tarihi: Oct 2008
Üye numarası: #268608 Yer: Bakırköy
Mesaj sayısı: 1,868
Karma etkisi: 3755
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Karma: 375073
|
Dostum 3 tablo var ama 1 tablo üzerindeki verileri istemişsin. Aynı tablo üzerindeki değerleri kontrol ediyorsun.
Kodu hiç derlemeden syntax hatası olabilir. Kod:
using(SqlConnection connection = new SqlConnection("connection string değeriniz"))
{
string query ="select DOC_ID,DOC_NUMBER,REPLIED_DOC_NUMBER From DOCUMENT";
SqlCommand command = new SqlCommand(query, connection);
using (SqlDataReader reader = command.ExecuteReader())
{
int counter=0;
while (reader.Read())
{
counter=counter+1;
if(counter>1){
string query2 ="select DOC_ID,DOC_NUMBER,REPLIED_DOC_NUMBER From DOCUMENT";
SqlCommand command2 = new SqlCommand(query2, connection);
using (SqlDataReader reader2 = command2.ExecuteReader())
{
if(reader2.GetString("DOC_NUMBER").Equals(reader.GetString("REPLIED_DOC_NUMBER")))
reader2.GetString("DOC_ID");
reader2.GetString("DOC_NUMBER");
reader2.GetString("REPLIED ");
break;
}
}
if(counter==1){
reader.GetString("DOC_ID");
reader.GetString("DOC_NUMBER");
reader.GetString("REPLIED_DOC_NUMBER");
}
}
reader.Close();
}
connection.Close();
}
Kaynak: Wardom http://www.wardom.com.tr/showthread.php?t=518294 Ben soruyu şu şekilde algılamıştım. Bir DOC_ID var bu DOC_ID'nin bir L_O_CATION' da tutuluyor ve bu LOKASYONDAN dosyaları birileri alıp veriyor bu değerlerde SUBMISSIONAL tablonda tutuyorsun. Bunun için kod aşağıda, Üç tabloyu innerjoin ile birleştirecez ![]() Kod:
using(SqlConnection connection = new SqlConnection("connection string değeriniz"))
{
string query ="select DOC.DOC_ID AS DOC_ID ,DOC.DOC_NUMBER AS DOC_NUMBER ,DOC.REPLIED_DOC_NUMBER AS REPLIED, LOC.LOC_ID AS LOC_ID, SUB.SUB_ID AS SUB_ID FROM DOCUMENT DOC inner join L_O_C_ATION LOC on LOC.DOC_ID = DOC.DOC_ID inner join SUBMISSIONAL SUB on SUB.LOC_ID = LOC.LOC_ID;
SqlCommand command = new SqlCommand(query, connection);
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
reader.GetString("DOC_ID");
reader.GetString("DOC_NUMBER");
reader.GetString("REPLIED ");
reader.GetString("LOC_ID");
reader.GetString("SUB_ID");
}
reader.Close();
}
connection.Close();
}
|
|
|
|
|
|
#9 |
|
Cool Üye
![]() ![]() ![]() Kayıt Tarihi: Apr 2006
Üye numarası: #64796 Yer: aydın ve girne
Mesaj sayısı: 129
Karma etkisi: 19
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Karma: 1229
|
Öncelikle yeni yılınız kutluolsun. Şimdi ben c# ı tam olarak bilmediğim için yazdığınız kodu çok anlayamadım. Ben tam olarak size tasarımımı anlatayım. Elimizde 3 tablo var. Bunlar DOCUMENT, L_O_C_ATION(normalde arada "_" yok ama site **** cevirdiği için bu şekilde yazdım), SUBMISSIONAL. DOCUMENT tablosundaki primary key'i DOC_ID. Bu DOC_ID aynı zamanda L_O_C_ATION ve SUBMISSIONAL tablolarının primary key'i ve foreign key'i. Bu tabloların elemanlarıda aşağıdaki gibi;
DOCUMENT=doc_id,CLASS_OF_DOC,TYPE_OF_DOC,D.TITLE_O F_DOC,D .DOC_DATE,AUTHOR,DOC_NUMBER,REPLIED_DOC_NUMBER LOCAT_I_O_N=doc_id,FILE_NO,ROOM_NO,SHELF_NO,BORROW ER SUBMISSIONAL=doc_id,ARRIVAL_DATE,SUBMITTED_BY,SUBM ITTED_T O,SUBMITTER_BRANCH,SUBMITTED_BRANCH Şimdi tam olarak istediğim şeyi bir örnekle anlatıcak olursam; DOCUMENT tablomuzun aşağıdaki gibi olduğunu varsayalım,yani bu verileri içerdiğini düşünelim. Kaynak: Wardom http://www.wardom.com.tr/showthread.php?t=518294 DOC_ID-----------DOC_NUMBER----------REPLIED_DOC_NUMBER 10-------------------------1A-------------------------NULL 20-------------------------5A-------------------------1A 12-------------------------3A-------------------------5A 40-------------------------4A-------------------------3A 21-------------------------NULL----------------------NULL 42-------------------------NULL----------------------NULL şimdi bu veriye baktığımızda sırasıyla DOC_ID si 10,20,12,40 olan dosyaların birbirine bağlı olduğunu görüyoruz. Bunların birbirine bağlı olduklarını DOC_NUMBER, REPLIED_DOC_NUMBER ilişkisine bakarak anlıyabiliriz. Diger dosyaların "REPLIED_DOC_NUMBER"ı cevaplanan dosyanın "DOC_NUMBER"ına eşit olucak. Mesela DOC_ID'si 10 olan dosyanın cevabı DOC_ID'si 20 olan dosyadır. Çünkü 10'un DOC_NUMBER'ı 20'in REPLIED_DOC_NUMBER'ına eşitdir. Bu eşitlik 10 ile 20 yi birbirine bağlar. 20'in DOC_NUMBER ı ise DOC_ID si 12 olan dosyanın REPLIED_DOC_NUMBER'ına eşittir. bunun sonucunda 20 ile 12 birbirine bağlanır. Daha öncedende 10 ile 20 birbirine bağlanmıştı. şimdiki sıramız 10-20-12 şeklinde oldu. aynı işlemin ardındanda sıramız 10-20-12-40 şeklini alıyor. Ve ekrana yansıtıyor. Bu verilerle bağlantısı olan SUBMISSIONAL ve LOCAT_I_O_N tablolarındaki değerlerde ekrana yansıyor. Yukarıdaki SP bu işi yapıyor ama verileri parça parça gönderiyor buda bizim asıl sorunumuz. Bunları ya sql de birleştirmemiz yada c#da birleştirerek ekrana yazdırmamız gerekiyor. Sizin yukarıda yazdığınız kod bu işi yapabiliyormu?eğer yapa biliyorsa beni büyük bir derten kurtarmış olursunuz. |
|
|
|
|
|
#10 |
|
Forum Kalfası
![]() ![]() ![]() ![]() Kayıt Tarihi: Oct 2008
Üye numarası: #268608 Yer: Bakırköy
Mesaj sayısı: 1,868
Karma etkisi: 3755
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Karma: 375073
|
Valla test etme işi sana kalmış. Ben yardımcı olmaya çalıştım. DB senin elinde kayıtlarda senin elinde C# projesi açıp bir buton ve label ekleyip dene.
|
|
|
|
|
|
#11 |
|
Cool Üye
![]() ![]() ![]() Kayıt Tarihi: Apr 2006
Üye numarası: #64796 Yer: aydın ve girne
Mesaj sayısı: 129
Karma etkisi: 19
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Karma: 1229
|
yardımlarınız için çok teşekkürler, ben bunu diğer arkadaşa yönlendiriyorum. Durumdan sizide haberdar ederim.
|
|
|
|
![]() |
| Şu Anda Konuyu Görüntüleyenler: 1 (0 üye ve 1 misafir) | |
| Konu Araçları | Bu Konuda Ara |
Bu Konuda Aradığınızı Bulamadıysanız Şunlara Bakmanızı Öneririz
|
||||
| Konu | Konu Yazarı | Forum | Cevaplar | Son Mesaj |
| Sql enjeksıyon saldırıları & korunma yöntemleri | KOMANDO_26 | Exploiting | 3 | 21-04-2011 07:54 |
| SQL Enjeksiyon Saldırıları & Korunma Yolları | BorderLiNe | Çöp Kutusu | 2 | 23-06-2009 23:20 |
| SQL Injection' a Giriş ve SQL Injection Nedir? | c3h3n | Vulnerabilities - Güvenlik Açıkları | 2 | 08-08-2008 23:57 |
| Oracle Geliştiricileri için SQL Injection Saldırıları ve Korunma Yöntemleri | ESTERGON | Güvenlik | 4 | 19-11-2007 15:05 |
| sql injection | AdrianGordon | Web Hacking ve Güvenlik | 2 | 20-09-2007 17:48 |
|
|
