+ Yanıtla
Sayfa Düzeni: 2 / 2
İlkİlk 1 2
Toplam 13 sonuçtan 11 ile 13 arası olanlar

Konu Başlığı: Stored Procedure hakkında

  1. #11

    Re: Stored Procedure hakkında

    MySQL kullanan arkadaşlara faydası olur diye yazıyorum.
    parent ve child yani "ana tablo" ve "alt tablo" olmak üzere ana tabloda veri silinirse alt tablosunda eşleşen veriler de otomatik silinir. MySQL ilişkili tablo örneği.
    Kod:
    CREATE TABLE parent (id INT NOT NULL,
                         PRIMARY KEY (id)
    ) ENGINE=INNODB;
    CREATE TABLE child (id INT, parent_id INT,
                        INDEX par_ind (parent_id),
                        FOREIGN KEY (parent_id) REFERENCES parent(id)
                          ON DELETE CASCADE
    ) ENGINE=INNODB;
    
    sevgiSaygi = true;

  2. #12

    Set nocount on

    üstadlar birinci sorum,

    conn.execute yaptığım zaman recordset oluşturmadan nasıl sonuç döndürürüm?

    ikinci sorum şu;

    oluşturduğum sp şu şekilde
    Kod:
    CREATE PROCEDURE [dbo].[frnDelete]
    	@fid int
    AS
    BEGIN
    	IF EXISTS(SELECT * FROM Furniture WHERE upperID=@fid)
    	BEGIN
    		SELECT '1'
    	END
    	ELSE
    	BEGIN
    		DELETE FROM Furniture WHERE id=@fid
    		SELECT '0'
    	END
    END
    
    Bu şekilde yapınca exist kısmına girerse sorgu 1 sonucunu döndürüyor. ama delete kısmını yaptıktan sonra sonuç döndürmedi. ben de biraz araştırma yapınca SET NOCOUNT ON; u buldum. bunu yapınca sonuç çıktı. bu SET NOCOUNT ON nedir, yenir mi içilir mi? googlde arattım ama fazla anlayamadım. yardımcı olur musunuz?

  3. #13

    Re: Stored Procedure hakkında

    Neden ısrarla kayıtseti kullanıyorsun? İşte sana "Return Value" döndürebileceğin kodlar:

    Senin sp'nin uyarlanmışı :

    Kod:
    CREATE PROCEDURE [dbo].[frnDelete]
    	@fid int
    AS
    BEGIN
    	IF EXISTS(SELECT * FROM Furniture WHERE upperID=@fid)
    	BEGIN
    		RETURN 1
    	END
    	ELSE
    	BEGIN
    		DELETE FROM Furniture WHERE id=@fid
    		RETURN 0
    	END
    END
    
    Aynı sp aşağıdaki gibi daha kısa ve şık yazılabilir :

    Kod:
    CREATE PROCEDURE [dbo].[frnDelete]
    (
    	@fid int
    )
    AS
    BEGIN
    	IF NOT EXISTS(SELECT * FROM Furniture WHERE upperID=@fid)
    	BEGIN
    		DELETE FROM Furniture WHERE id=@fid
    		RETURN 0
    	END
    
    	RETURN 1
    END
    

    (not : ASP ile kod yazmayalı asırlar oldu, aşağı yukarı şöyle hatırlıyorum.)

    Kod:
    dim con, cmd, result, fid
    
    fid = 837932
    
    set con = server.createobject("adodb.connection")
    connect.open ".....connection string....."
    set cmd = server.createobject("adodb.command")
    set cmd.activeconnection = con
    cmd.CommandType = adCmdStoredProc
    cmd.CommandText = "frnDelete"
    cmd.Parameters.Append cmd.CreateParameter("@result", adInteger, adParamReturnValue)
    cmd.Parameters.Append cmd.CreateParameter("@fid", adInteger, adParamInput)
    cmd.Parameters("@fid") = fid
    cmd.Execute()
    result = cmd.Parameters("@result ")
    
    set cmd = nothing
    con.close()
    set con = nothing
    
    SET NOCOUNT ON|OFF'a gelince;

    bu parametrenin OFF olması durumunda, SQL server, kod içinde yer alan SQL cümlelerinin etkilediği kayıtların sayısını istemciye döndürür. Mesele senin örneğinde DELETE işlemi yapıldığı çin "1 row(s) affected" gibi bir mesajı istemciye gönderecektir ve bu da istediğin gibi sonucu alamamana yol açmaktadır. SET NOCOUNT ON kullanımı "best practice" olarak kabul edilir.
    Mesaj energizer tarafından 16.09.2008 (00:54) yeniden düzenlendi. Açıklama: imla
    Spina - Kurumsal Web ve Intranet Çözümleri
    www.spina.com.tr

+ Yanıtla
Sayfa Düzeni: 2 / 2
İlkİlk 1 2

Bu konu başlığı için etiketler

Mesaj Seçenekleri

  • Yeni başlık açamazsınız
  • Cevap yazabilirsiniz
  • Dosya ekleyemezsiniz
  • Mesajlarınızı değiştiremezsiniz