SQL Yardım
-
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 -
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.
-
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
