folder Tahribat.com Forumları
linefolder Database - Veritabanı
linefolder MSSQL Stored Prosedur Yardım



MSSQL Stored Prosedur Yardım

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    AsayisciAsayisci
    Asayisci
    Asayisci's avatar
    Kayıt Tarihi: 14/Eylül/2009
    Erkek

    Merhaba arkadaşlar

    Aşağıdaki stored prosedur de dinamik olarak sorgu cümlesi oluşturarak farklı veritabanlarından sorgu yapıyorum.

    stored prosedür de dışarıdan aldığım değişkenle CariAd tablosundan sorgu yapıyorum

    Dinamik olarak oluşturduğum kolonlarda sorgu yapamıyorum. Örneğin SubeNo colonunda sorgu yapmka istiyorum
    hata alıyorum.  Bu konuda yardımcı olabilecek biri var mı?

    Chat GPT de işe yaramadı saçmalıyor.

    ALTER PROCEDURE [dbo].[Api_CariQuery]
         @CariAd nvarchar(100) 
    AS
    BEGIN
        DECLARE @dynamicSQL NVARCHAR(MAX) = '';
    
        SELECT @dynamicSQL = @dynamicSQL + 'SELECT CAST( CONCAT(''' + SubeAdi + ''',CAST(CariID as nvarchar(MAX))) As nvarchar(MAX)) as SubeNo, CariID, CariAd, UrunBilgisi, Ili, Ilcesi, Mahallle, CariAdres, CariTelefon, CariTelefon2, CariAciklama, KayitTarihi, SonIslemTarihi FROM ' + QUOTENAME(dbName) + '.dbo.Cari WHERE CariAd LIKE @CariAd UNION '
        FROM OnayServis_1612.dbo.Veritabanlari;
    
        SET @dynamicSQL = LEFT(@dynamicSQL, LEN(@dynamicSQL) - 5); -- 'UNION ' ifadesini kaldırır
    
    DECLARE @CariAdPattern NVARCHAR(100);
    SET @CariAdPattern = '%' + @CariAd + '%';
    
    EXEC sp_executesql @dynamicSQL, N'@CariAd nvarchar(100)', @CariAd = @CariAdPattern;
    
    END;

     

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    mugen
    mugen's avatar
    Kayıt Tarihi: 22/Haziran/2013
    Erkek

    Dinamik kolonlarda en iyi sonucu view ile alırsın hocam, dinamik kolon oluşturduğun query'i view haline getir ve tablo gibi sorgula, en kötü ikinci bir select kullanırsan, örneğin select * from (select generated from products) where generated .... istediğini elde edebilirsin, ama uzun vadede view daha sağlam olacaktır, bu yöntem de sub-query olarak geçer. Ama view'ın performans konusunda +'ları olabiliyor ve genelleştirilmiş olduğu için daha mantıklı duruyor. Tahmin ediyorumki o ekstra veri tabanlarına bu viewı koymaktan üşeneceksen, sub query işini çözecektir.

    https://dba.stackexchange.com/questions/51264/how-to-get-performance-benefits-from-a-view-vs-subquery

     

     

     

    mugen tarafından 10/Şub/24 21:22 tarihinde düzenlenmiştir

    O mahiler ki derya içredir deryayı bilmezler.. .
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    AsayisciAsayisci
    Asayisci
    Asayisci's avatar
    Kayıt Tarihi: 14/Eylül/2009
    Erkek
    mugen bunu yazdı

    Dinamik kolonlarda en iyi sonucu view ile alırsın hocam, dinamik kolon oluşturduğun query'i view haline getir ve tablo gibi sorgula, en kötü ikinci bir select kullanırsan, örneğin select * from (select generated from products) where generated .... istediğini elde edebilirsin, ama uzun vadede view daha sağlam olacaktır, bu yöntem de sub-query olarak geçer. Ama view'ın performans konusunda +'ları olabiliyor ve genelleştirilmiş olduğu için daha mantıklı duruyor. Tahmin ediyorumki o ekstra veri tabanlarına bu viewı koymaktan üşeneceksen, sub query işini çözecektir.

    https://dba.stackexchange.com/questions/51264/how-to-get-performance-benefits-from-a-view-vs-subquery

     

     

     

    The CREATE VIEW SQL construct or statement is not supported.

    yani ben bu sorguyu muhakkak surette stored prosedürle yapmam gerekiyor.
    farklı veritabanlarında aynı isimli tablolardan sorgulama yapıyorum.
    bunu da dinamik olarak yapıyorum. databaselerden birinde Veritabanları adında bir tablo var
    database adlarını orada tutup dinamik olarak sql sorgu cümlesi oluşturuyorum
    yarın birgün farklı bir database'i de dahil etmek istediğimde kodu veya stored prosedürü güncellememe gerek kalmayacak.
    Tek yapmam gereken veritabanları isimli tabloya database adını eklemek olacak.

    yapı böyle olduğu için view işimi görmüyor. stored prosedür ile sql query string oluşturup 

    execute ediyorum.

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    mugen
    mugen's avatar
    Kayıt Tarihi: 22/Haziran/2013
    Erkek
    Asayisci bunu yazdı
    mugen bunu yazdı

    Dinamik kolonlarda en iyi sonucu view ile alırsın hocam, dinamik kolon oluşturduğun query'i view haline getir ve tablo gibi sorgula, en kötü ikinci bir select kullanırsan, örneğin select * from (select generated from products) where generated .... istediğini elde edebilirsin, ama uzun vadede view daha sağlam olacaktır, bu yöntem de sub-query olarak geçer. Ama view'ın performans konusunda +'ları olabiliyor ve genelleştirilmiş olduğu için daha mantıklı duruyor. Tahmin ediyorumki o ekstra veri tabanlarına bu viewı koymaktan üşeneceksen, sub query işini çözecektir.

    https://dba.stackexchange.com/questions/51264/how-to-get-performance-benefits-from-a-view-vs-subquery

     

     

     

    The CREATE VIEW SQL construct or statement is not supported.

    yani ben bu sorguyu muhakkak surette stored prosedürle yapmam gerekiyor.
    farklı veritabanlarında aynı isimli tablolardan sorgulama yapıyorum.
    bunu da dinamik olarak yapıyorum. databaselerden birinde Veritabanları adında bir tablo var
    database adlarını orada tutup dinamik olarak sql sorgu cümlesi oluşturuyorum
    yarın birgün farklı bir database'i de dahil etmek istediğimde kodu veya stored prosedürü güncellememe gerek kalmayacak.
    Tek yapmam gereken veritabanları isimli tabloya database adını eklemek olacak.

    yapı böyle olduğu için view işimi görmüyor. stored prosedür ile sql query string oluşturup 

    execute ediyorum.

    sub query önerisini denedin mi hocam, en çaresiz kaldığında o çalışır, veri tabanları yapını bilmiyorum, bir migration scripti falan kullanıyorsan aslında view sıkıntı olmazdı kurguda ama, subquery işini çözmeli


    O mahiler ki derya içredir deryayı bilmezler.. .
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    AsayisciAsayisci
    Asayisci
    Asayisci's avatar
    Kayıt Tarihi: 14/Eylül/2009
    Erkek
    mugen bunu yazdı
    Asayisci bunu yazdı
    mugen bunu yazdı

    Dinamik kolonlarda en iyi sonucu view ile alırsın hocam, dinamik kolon oluşturduğun query'i view haline getir ve tablo gibi sorgula, en kötü ikinci bir select kullanırsan, örneğin select * from (select generated from products) where generated .... istediğini elde edebilirsin, ama uzun vadede view daha sağlam olacaktır, bu yöntem de sub-query olarak geçer. Ama view'ın performans konusunda +'ları olabiliyor ve genelleştirilmiş olduğu için daha mantıklı duruyor. Tahmin ediyorumki o ekstra veri tabanlarına bu viewı koymaktan üşeneceksen, sub query işini çözecektir.

    https://dba.stackexchange.com/questions/51264/how-to-get-performance-benefits-from-a-view-vs-subquery

     

     

     

    The CREATE VIEW SQL construct or statement is not supported.

    yani ben bu sorguyu muhakkak surette stored prosedürle yapmam gerekiyor.
    farklı veritabanlarında aynı isimli tablolardan sorgulama yapıyorum.
    bunu da dinamik olarak yapıyorum. databaselerden birinde Veritabanları adında bir tablo var
    database adlarını orada tutup dinamik olarak sql sorgu cümlesi oluşturuyorum
    yarın birgün farklı bir database'i de dahil etmek istediğimde kodu veya stored prosedürü güncellememe gerek kalmayacak.
    Tek yapmam gereken veritabanları isimli tabloya database adını eklemek olacak.

    yapı böyle olduğu için view işimi görmüyor. stored prosedür ile sql query string oluşturup 

    execute ediyorum.

    sub query önerisini denedin mi hocam, en çaresiz kaldığında o çalışır, veri tabanları yapını bilmiyorum, bir migration scripti falan kullanıyorsan aslında view sıkıntı olmazdı kurguda ama, subquery işini çözmeli

    buna bi bakacağım.

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wh0
    wh0's avatar
    Kayıt Tarihi: 21/Temmuz/2008
    Homo

    :)


    🏴‍☠️Hi'dan gelen varır Who'ya, Hi'da onun adıdır Who'da...
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Yazilimci
    Yazilimci's avatar
    Kayıt Tarihi: 01/Şubat/2014
    Erkek

    Hocam aşağıdaki kodu dener misin? Gerekli durumları yorum satırına yazdım

    ALTER PROCEDURE [dbo].[Api_CariQuery]
         @CariAd nvarchar(100)
    AS
    BEGIN
        DECLARE @dynamicSQL NVARCHAR(MAX) = '';
     
        SELECT @dynamicSQL = @dynamicSQL + 'SELECT CAST( CONCAT(''' + SubeAdi + ''',CAST(CariID as nvarchar(MAX))) As nvarchar(MAX)) as SubeNo, CariID, CariAd, UrunBilgisi, Ili, Ilcesi, Mahallle, CariAdres, CariTelefon, CariTelefon2, CariAciklama, KayitTarihi, SonIslemTarihi FROM ' + QUOTENAME(dbName) + '.dbo.Cari WHERE CariAd LIKE @CariAd UNION '
        FROM OnayServis_1612.dbo.Veritabanlari;
     
        SET @dynamicSQL = LEFT(@dynamicSQL, LEN(@dynamicSQL) - 5); -- 'UNION ' ifadesini kaldırır
     
    DECLARE @CariAdPattern NVARCHAR(100);
    SET @CariAdPattern = '%' + @CariAd + '%';
     
    --EXEC sp_executesql @dynamicSQL, N'@CariAd nvarchar(100)', @CariAd = @CariAdPattern;
    
    CREATE TABLE #tempTable(SubeNo nvarchar(100), CariID int, CariAd nvarchar(100)); -- burada sütunları tablo ile aynı olacak şekilde düzenle
    
    DECLARE @dynamicSQL1 NVARCHAR(MAX);
    
    SET @dynamicSQL1 = 'INSERT INTO #tempTable ' + @dynamicSQL; -- Buradaki insert into yu yukarıda oluşturduğun sorguyada ekleyebilirsin. Ekstra bir değişken tanımlamana gerek kalmaz hocam
    
    EXEC sp_executesql @dynamicSQL1, N'@CariAd nvarchar(100)', @CariAd = @CariAdPattern;
    
    SELECT * FROM #tempTable WHERE SubeNo=1; -- Where koşullarını kendine göre ayarlarsın
     
    END;

     


    Titanyumun gücü adına!!!
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    AsayisciAsayisci
    Asayisci
    Asayisci's avatar
    Kayıt Tarihi: 14/Eylül/2009
    Erkek
    Yazilimci bunu yazdı

    Hocam aşağıdaki kodu dener misin? Gerekli durumları yorum satırına yazdım

    ALTER PROCEDURE [dbo].[Api_CariQuery]
         @CariAd nvarchar(100)
    AS
    BEGIN
        DECLARE @dynamicSQL NVARCHAR(MAX) = '';
     
        SELECT @dynamicSQL = @dynamicSQL + 'SELECT CAST( CONCAT(''' + SubeAdi + ''',CAST(CariID as nvarchar(MAX))) As nvarchar(MAX)) as SubeNo, CariID, CariAd, UrunBilgisi, Ili, Ilcesi, Mahallle, CariAdres, CariTelefon, CariTelefon2, CariAciklama, KayitTarihi, SonIslemTarihi FROM ' + QUOTENAME(dbName) + '.dbo.Cari WHERE CariAd LIKE @CariAd UNION '
        FROM OnayServis_1612.dbo.Veritabanlari;
     
        SET @dynamicSQL = LEFT(@dynamicSQL, LEN(@dynamicSQL) - 5); -- 'UNION ' ifadesini kaldırır
     
    DECLARE @CariAdPattern NVARCHAR(100);
    SET @CariAdPattern = '%' + @CariAd + '%';
     
    --EXEC sp_executesql @dynamicSQL, N'@CariAd nvarchar(100)', @CariAd = @CariAdPattern;
    
    CREATE TABLE #tempTable(SubeNo nvarchar(100), CariID int, CariAd nvarchar(100)); -- burada sütunları tablo ile aynı olacak şekilde düzenle
    
    DECLARE @dynamicSQL1 NVARCHAR(MAX);
    
    SET @dynamicSQL1 = 'INSERT INTO #tempTable ' + @dynamicSQL; -- Buradaki insert into yu yukarıda oluşturduğun sorguyada ekleyebilirsin. Ekstra bir değişken tanımlamana gerek kalmaz hocam
    
    EXEC sp_executesql @dynamicSQL1, N'@CariAd nvarchar(100)', @CariAd = @CariAdPattern;
    
    SELECT * FROM #tempTable WHERE SubeNo=1; -- Where koşullarını kendine göre ayarlarsın
     
    END;

     

    Bu işimi çözdü.
    teşekkür ederim.

Toplam Hit: 434 Toplam Mesaj: 8
stored prosedure parameters