Değer ve yetkiye göre sorgulama

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
denizfatihi
Üye
Mesajlar: 254
Kayıt: 16 Şub 2004 06:12
Konum: istanbul

Değer ve yetkiye göre sorgulama

Mesaj gönderen denizfatihi »

Merhaba,

Aşağıdaki sorgu ile tümü ve aranan kısmı getirmeye çalışıyoruz tümü kısmında sorun yok yalnız aranan kısmında sorun var ve bu durumu yetkilere göre de aynı zamanda getirmem gerekiyor, 0 ve 1 yetkileri tümü 3 olan ise kendi departmanına ait olanları getirecek. Yardımcı olması için tablo scriptlerini de ekledim, şimdiden teşekkür ederim. iyi günler.


https://www.filemail.com/d/nddkrgfgbnrfuio

Kod: Tümünü seç

DECLARE @BIRIMYETKI int=5
DECLARE @YETKI int=0
DECLARE @CIKISKONTROL int=1
DECLARE @TALEPBIRIMI VARCHAR(50)=NULL        
DECLARE @TALEPKISI VARCHAR(50)=NULL        
DECLARE @URUNACIKLAMA VARCHAR(50)='%masa%'    
DECLARE @URUNMODELI VARCHAR(50)    =NULL    


SELECT SADE.ID
    ,[dbo].[InitCap](SADE.DEPARTMAN) AS DEPARTMAN
    ,SADE.FIRMA
    ,SADE.SICIL    
     ,[dbo].[InitCap](SADE.ADISOYADI) AS ADISOYADI        
     ,SADE.SASID        
     ,SADE.SIRANO        
     ,[dbo].[InitCap](SADE.TALEPEDENBIRIM    ) AS TALEPEDENBIRIM    
     ,[dbo].[InitCap](SADE.TALEPEDENKISI) AS     TALEPEDENKISI    
     ,SADE.TALEPTARIHI        
     ,SADE.ADET        
     ,[dbo].[InitCap](SADE.TALEPEDILENURUNACIKLAMASI) AS TALEPEDILENURUNACIKLAMASI        
     ,[dbo].[InitCap](SADE.MARKAMODEL) AS     MARKAMODEL    
     ,SADE.FIYAT        
     ,SADE.KDVDAHILHARIC        
     ,SADE.DTIPI1        
     ,SADE.DURUMU
      ,SADE.ALTDURUMU
      ,D.ALTDURUMACIKLAMA
      ,D.DURUMTIPI    
     ,SADE.ANLIKTARIH        
     ,SADE.GENEL_IP        
     ,SADE.LOCAL_IP        
     ,SADE.BILGISAYARADI        
     ,SADE.BIRIMAMIRI
      ,PE.YETKI
      ,SADE.KOD1,SADE.KOD2,SADE.KOD3,SADE.KOD4,SADE.KOD5, SADE.KARTID
        
      FROM SASDETAY SADE    
        
        
    left JOIN DURUMTIPLERI D ON (D.ALTDURUMU=SADE.ALTDURUMU)     AND D.TURUTIPI=4
    left join PERSONEL PE ON (PE.SICIL=SADE.SICIL) AND (SADE.FIRMA=PE.FIRMA)
    WHERE

SADE.BIRIMAMIRI=
    (case WHEN @YETKI=1 THEN
(select distinct SADE.BIRIMAMIRI from SASDETAY SADE
WHERE SADE.BIRIMAMIRI>=1 AND SADE.ALTDURUMU=3 AND  SADE.FIRMA=PE.FIRMA AND  @CIKISKONTROL=0)
    
WHEN @YETKI=3 THEN
(select distinct SADE.BIRIMAMIRI from SASDETAY SADE
WHERE SADE.BIRIMAMIRI=@BIRIMYETKI AND SADE.ALTDURUMU=1 AND  SADE.FIRMA=PE.FIRMA AND @CIKISKONTROL=0 )

WHEN @YETKI=0 THEN
(select distinct SADE.BIRIMAMIRI from SASDETAY SADE
WHERE SADE.BIRIMAMIRI>=0 AND SADE.ALTDURUMU=2 AND  SADE.FIRMA=PE.FIRMA AND @CIKISKONTROL=0 )

END)
    AND        
    SADE.ALTDURUMU=
(case  when @YETKI=1 THEN
(select distinct SADE.ALTDURUMU from SASDETAY SADE
WHERE  SADE.ALTDURUMU=3 AND SADE.BIRIMAMIRI>=0
AND @CIKISKONTROL=0)

WHEN @YETKI=3 THEN
(select distinct SADE.ALTDURUMU from SASDETAY SADE
WHERE SADE.ALTDURUMU=1 AND SADE.BIRIMAMIRI=@BIRIMYETKI AND  SADE.FIRMA=PE.FIRMA AND @CIKISKONTROL=0)

WHEN @YETKI=0 THEN
(select distinct  SADE.ALTDURUMU  from SASDETAY SADE
WHERE SADE.ALTDURUMU=2 AND SADE.BIRIMAMIRI>=0 AND  SADE.FIRMA=PE.FIRMA AND @CIKISKONTROL=0)

END)

OR ( @YETKI=0 and  SADE.BIRIMAMIRI>=0   AND @CIKISKONTROL=1 )
OR ( @YETKI=1 and  SADE.BIRIMAMIRI>=0  AND @CIKISKONTROL=1  )
OR ( @YETKI=3 and  SADE.BIRIMAMIRI=@BIRIMYETKI AND @CIKISKONTROL=1  )

  AND SADE.TALEPEDILENURUNACIKLAMASI LIKE '%' +@URUNACIKLAMA+ '%'    
    AND SADE.MARKAMODEL LIKE '%'+ @URUNMODELI + '%'    
    AND SADE.TALEPEDENKISI LIKE '%'+ @TALEPKISI + '%'    
    AND SADE.TALEPEDENBIRIM LIKE '%'+ @TALEPBIRIMI + '%'
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7586
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Re: Değer ve yetkiye göre sorgulama

Mesaj gönderen mussimsek »

ben genelde SP'lerde 2 türlü kontrol yapıyorum.

1. Yetkisi varsa çalıştırsın, yoksa çalıştırmasın gibi. Bu durumda gelen parametreden kontrol ediyorum.

Kod: Tümünü seç

if exists(select 1 from dbo.KULLANICI_YETKILERI with (NOLOCK) where KULLANICI_NO=@KULLANICI_NO ...)
begin
...
end
else
begin
  raiserror(...)
end
Burada gerekirse bir kaç tablodan verileri değişkenlere alıp öyle de kontrol edebilirsiniz.

2. Eğer where kısmında süzme yapacaksam da or ile kullanıyorum.

Kod: Tümünü seç

where ( ((@SART1 = '') or (filanca_kod = @SART1)) and
   ((@SART2 = 0) or (filanca_kod = @SART2)) 
... )
gibi.

Kolay gelsin.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Değer ve yetkiye göre sorgulama

Mesaj gönderen freeman35 »

Kod: Tümünü seç

( /* <--*/ 
OR ( 
       ( SADE.BIRIMAMIRI>=0  AND @CIKISKONTROL=1 )  and (@YETKI=0 or @YETKI=1 )
    )
OR ( @YETKI=3 and  SADE.BIRIMAMIRI=@BIRIMYETKI AND @CIKISKONTROL=1  )
)/* <--*/ 
eksik parantezlerden kaylanıyor gibi geldi bana. Sorgularıda gruplandırmak vede performans içinde indexleri düzenlemek gereklidir.
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
denizfatihi
Üye
Mesajlar: 254
Kayıt: 16 Şub 2004 06:12
Konum: istanbul

Re: Değer ve yetkiye göre sorgulama

Mesaj gönderen denizfatihi »

Merhaba,

Geç dönüş için kusura bakmayın, ancak fırsat oldu.

mussimsek hocam fikrinizi çok sevdim, bundan sonra ilk fırsatta mutlaka kullanacağım.

freeman35 dediğiniz gibi sorun aşağıdaki kısımda kaldırınca normal çalışıyor, ekleyince genel olarak her hangi bir veri gelmiyor, birde aranan kelimeler kısmında "and" kısımlarını "or" ile değiştirmek gerekti ama hala sorun devam ediyor çözüm bulursam mutlaka paylaşacağım.

Fikirleriniz için teşekkür ederim. iyi çalışmalar,

Kod: Tümünü seç

( /* <--*/ 
OR ( 
       ( SADE.BIRIMAMIRI>=0  AND @CIKISKONTROL=1 )  and (@YETKI=0 or @YETKI=1 )
    )
OR ( @YETKI=3 and  SADE.BIRIMAMIRI=@BIRIMYETKI AND @CIKISKONTROL=1  )
)/* <--*/ 
Cevapla