SQL Yardım

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    camarade
    ontedi
    ontedi's avatar
    Kayıt Tarihi: 04/Eylül/2005
    Erkek

    Arkadaşlar bir içerik yönetim sistemi yazıyorum, sistemde kullanıcı rolleri, yönetim sayfaları ve bu sayfalardaki rollerin yetkilerini tutuğum tablolar mevcut

    Sayfaların bilgisinin tutulduğu tablo (tblSayfalar)

     

    Rollere ait sayfa yetkilerinin tutulduğu tablo (tblRollerin_Sayfalari)

     

    Sorguyu şöyle yazınca sorun yok

     

    DECLARE @SQL nvarchar(255);
    DECLARE @strSutun_Adi NVARCHAR(255) = 'listele'
    SET @SQL = 'SELECT ' + @strSutun_Adi + ' from tblCms_Rollerin_Sayfalari WHERE cms_sayfa_ID = 1 AND rol_ID = 1'
    EXECUTE (@SQL)

     

    Çıkan sonuç (1 numaralı rolun, 1 numaralı sayfada listele yetkisi)

     

    join ile biraz daha karmaşıklaştırılıyor

     

    DECLARE @strSutun_Adi NVARCHAR(255) = 'listele';
    DECLARE @strSorgu nvarchar(255);
    SET @strSorgu = 'SELECT ' + 
    '' + @strSutun_Adi + ' ' +
    'FROM ' +
    'tblSayfalar AS S ' + 
    'INNER JOIN ' +
    'tblRollerin_Sayfalari AS RS ' +
    'ON ' +
    'S.cms_sayfa_ID = RS.cms_sayfa_ID '
    EXECUTE (@strSorgu)

    Yapmak istediğim ise şu, sorguyu yazdım lakin tuhaf bir hata almaktayım. rol_ID, sayfa_adresi, sutun_adi değişkenlerini parametre olarak yollamak istediğimde

     

    DECLARE @intRol_ID INT = 1;
    DECLARE @strSayfa_Adresi NVARCHAR(255) = 'ayarlar.aspx';
    DECLARE @strSutun_Adi NVARCHAR(255) = 'listele';
    DECLARE @strSorgu nvarchar(255);
    SET @strSorgu = 'SELECT ' + 
    '' + @strSutun_Adi + ' ' +
    'FROM ' +
    'tblSayfalar AS S ' + 
    'INNER JOIN ' +
    'tblRollerin_Sayfalari AS RS ' +
    'ON ' +
    'S.cms_sayfa_ID = RS.cms_sayfa_ID ' +
    'WHERE ' +
    'S.sayfa_adresi = ' + @strSayfa_Adresi + ' ' +
    'AND ' +
    'RS.rol_ID = ' + @intRol_ID
    EXECUTE (@strSorgu)

     

    Çıkan hata

    Conversion failed when converting the nvarchar value 'SELECT listele FROM tblSayfalar AS S INNER JOIN tblRollerin_Sayfalari AS RS ON S.cms_sayfa_ID = RS.cms_sayfa_ID WHERE S.sayfa_adresi = ayarlar.aspx AND RS.rol_ID = ' to data type int.

     

    Özetle söylersek, SQL'e "rol_ID, sayfa_adresi ve sutun_adi" değerlerini gönderip sonuç almak, lkain hatadan ötürü bir şey yapamadım.

    ontedi tarafından 06/Haz/15 13:53 tarihinde düzenlenmiştir

    Matematikçi ve Yazılımcı. http://www.ontedi.com ve http://www.cizgi.site Siteme beklerim herkesi.
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    pesimistzombie
    pesimistzombie's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    nvarchar alanla int alanı karşılaştırmışsın. her iki tablodaki karşılık gelen her iki hücrenin aynı tipte olması lazım .. join yerine eski usül select kullanabilirsin select a.hede,b.hodo from tbl1 as a, tbl2 as b where a.cmssayfaid=b.cmssayfaid diye gider.


    :|
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    camarade
    ontedi
    ontedi's avatar
    Kayıt Tarihi: 04/Eylül/2005
    Erkek
    pesimistzombie bunu yazdı

    nvarchar alanla int alanı karşılaştırmışsın. her iki tablodaki karşılık gelen her iki hücrenin aynı tipte olması lazım .. join yerine eski usül select kullanabilirsin select a.hede,b.hodo from tbl1 as a, tbl2 as b where a.cmssayfaid=b.cmssayfaid diye gider.

    Bütün değişkenleri kontrol ettim lakin yine de böyle bir hata veriyor. Değişkenlerin sql sorgusunda yazımı yanlış herhalde.

     

     

    ontedi tarafından 06/Haz/15 13:52 tarihinde düzenlenmiştir

    Matematikçi ve Yazılımcı. http://www.ontedi.com ve http://www.cizgi.site Siteme beklerim herkesi.
Toplam Hit: 739 Toplam Mesaj: 3