Bu funtion içinde hata nerdedir acaba

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
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Bu funtion içinde hata nerdedir acaba

Mesaj gönderen adelphiforumz »

S.A
Bir Scaler function yazman istiyorum ve bu fonksiyon bana kendisine parametre olarak gönderdiğim tablo adına göre o tablonun primary key ini bulup
bu alana göre max numarayı 1 arttırıp geri döndürecek fakat biryerde sorun oluşuyor nerde hata yaptım yardımcı olabilirmisiniz.

Aşağıdaki kodu Check işleminden gecirince sorun göstermiyor fakat excute ta etmiyor

Kod: Tümünü seç

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[FNS_TabloGetMaxID] 
(
	@pTabloAdi varchar(100)
)
RETURNS int
AS
BEGIN  
  Declare @TabloIDName varchar(100) = ''
  Declare @MaxID int = 0
  Declare @xSabit varchar(20) = 'PRIMARY KEY'

  Set @TabloIDName = (select c.COLUMN_NAME 
                      from INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk , INFORMATION_SCHEMA.KEY_COLUMN_USAGE c 
                        where pk.TABLE_NAME =  @pTabloAdi 
                         and CONSTRAINT_TYPE =  @xSabit  
                         and c.TABLE_NAME = pk.TABLE_NAME 
                         and c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME)

  Set @MaxID = (SELECT MAX(@TabloIDName) AS SONNO FROM @pTabloAdi) 

  if (@MaxID is Null) or (@MaxID = 0) 
    Set @MaxID = 1 
  else 
    Set @MaxID = @MaxID + 1 

  RETURN @MaxID
END
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: Bu funtion içinde hata nerdedir acaba

Mesaj gönderen Kuri_YJ »

Selamlar,

Tam olarak ne hata kodu veriyor. görüntüde doğru gibi ama denemedim.

Kolay Gelsin
Adnan
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: Bu funtion içinde hata nerdedir acaba

Mesaj gönderen Kuri_YJ »

Selamlar,

Kodu aldım, management studioya yapıştırdım ve F5'e bastım ve aşağıdaki hatayı verdi.

Kod: Tümünü seç

Msg 1087, Level 16, State 1, Procedure FNS_TabloGetMaxID, Line 19
Must declare the table variable "@pTabloAdi".
Sizde nasıl vermiyor anlamadım. Bende M$-SQL Server 2008 Express R2 kurulu...

Kolay Gelsin
Adnan
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: Bu funtion içinde hata nerdedir acaba

Mesaj gönderen Kuri_YJ »

Selamlar,

Sanırım buldum.

Kod: Tümünü seç

  Set @MaxID = (SELECT MAX(@TabloIDName) AS SONNO FROM @pTabloAdi) 
Bu satırı Tırnak İçerisinde Execute Block olarak işletmek gerek.

Yani Function veya procedure un içine yadığınız sabit SELECT gibi komutlarda, tablo ismi değişken olamaz (diye biliyorum ama mikropsoft bu yaptım diyor olabilir)
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: Bu funtion içinde hata nerdedir acaba

Mesaj gönderen adelphiforumz »

S.A.

Aynı konuyu tekrar gündeme getiriyorum fakat her yerde bu sorun karşıma çıkıyor nasıl çözebiliriz fikri olan varmı
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: Bu funtion içinde hata nerdedir acaba

Mesaj gönderen Kuri_YJ »

Selamlar,

Sorunun ne olduğunu anladınız mı? Anladıysanız zaten ne yapacağınız belli, EXECUTE Statementlar için Table Name mutlak surette Constant olmalıdır. Yani oraya değişken veremezsiniz. Onun yerine oluşturulacak olan cümleden çıkacak değerler için tek tek cümleler oluşturmalısınız.

Yani,

Kod: Tümünü seç

  strBlock = 'Set @MaxID = (SELECT MAX('+@TabloIDName+') AS SONNO FROM '+@pTabloAdi+')'
  EXECUTE strBlock
Tam syntaxını hatırlamadığım için yaklaşık birşeyler yazdım. Bu şekilde düşünüp yapmanız lazım. strBlock içine bir tane SQL Statement oluşturup, daha sonra bunu EXECUTE etmelisiniz.

Kolay Gelsin
Adnan
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
BOGACHAN
Üye
Mesajlar: 38
Kayıt: 12 May 2004 02:37
Konum: istanbbul

Re: Bu funtion içinde hata nerdedir acaba

Mesaj gönderen BOGACHAN »

declare
@sqlstr nvarchar(3000),
@tablename varchar(10)

set @tablename='TABLO1'

set @sqlstr=N'select * from '+@tablename

EXEC sp_executesql @sqlstr
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: Bu funtion içinde hata nerdedir acaba

Mesaj gönderen adelphiforumz »

S.A.

Aşağıda yardımcı olmaya çalışan tüm herkese teşekkürler
Fakat bu kodları hiç çalıştırabileniniz varmıdır
ben veridğiniz örneklerin hepsini denedim fakat bir türlü çalıştıramadım

Acaba bu kodlar böyle çalışması gerekir diye verdiğiniz kodlarmıdır yoksa benim gözden kaçırdığım bir şeylerimi var

Teşekkürler
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Bu funtion içinde hata nerdedir acaba

Mesaj gönderen aslangeri »

arkadaşım arkadaşlar sormuş hata mesajı ne alıyorsun diye. birşey yazmamışsın.
çalıştıramadım demişsin sadece.
fonksiyon olarak çalıştırmak istediğin kodları normal olarak çalıştır.
birde yanlış hatırlamıyor isem fonksiyon içerisinde sabit sorgu çalıştırmada sıkıntı oluyordu. fonksiyon yerine procedure olarak bir deneyin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla