Fonksiyon ve procedurlerle alakalı

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ı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Fonksiyon ve procedurlerle alakalı

Mesaj gönderen naile »

Bir fonksiyonum var, bu fonksiyon içinde çalıştıracağım sql cümlesindeki tablo ismi değişken olduğu için nvarchar tipinde bir değişken tanımlayıp cümlemi bu değişkene atıyorum ve sp_executesql ile çalıştırıyorum.
sp_executesql s.p.sini bir procedür içinde kullanınca sorun olmuyor ama fonksiyon içerisinde bu prosedürü çalıştırmama izin vermiyor.

Fonksiyon içindeki sql cümlemi, içinde tablo ismi yerine değişken kullanarak başka nasıl kullanabilirim?

Kullandığım fonksiyon table döndürüyor. Procedur kullan demeyin, en son ihtimal onu yapacağım ama ben bu şekilde daha çok işime yarayacak.

ms sql server 2005 kullanıyorum.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Ben hep SQL Server (2000) üzerinde string sorgularımı EXECUTE ile çalıştırırım. Doğrusu sp_executesql den haberim yoktu. Birde EXEC kullanın belki çalışır.

Kod: Tümünü seç

declare @tbl nvarchar(20)
set tbl='Tablo'
EXEC('insert into'+@tbl+' (a1,a2) values (''1'',2)')
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

@sabanakman, fonksiyon içinde ona da izin vermedi. Acaba sen hiç bir fonksiyon içinde bu şekilde kullandın mı?
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Bu işlemi fonksiyon içinden gerçekten engellemişler. Boşa koyuyorsun dolmuyor, doluya koyuyorsun almıyor :) . Başka prosedür yazıp fonksiyon içinden bunu çalıştırınca bile fonksiyon içinden böyle bir işlem çalıştırılamaz diyerek hata çıkıyor. Çok şaşırdım bende bu işe :) . Acaba bunun gerçekten bir yolu var mıdır?
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Kullandığınız fonksiyonu paylaşabilir misiniz?
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Kod: Tümünü seç

ALTER  FUNCTION [dbo].[RprItemsTotals] (@ETar datetime, @NDay int)  
RETURNS @ItemsTotals TABLE 
(
    SOURCEINDEX smallint
    ,STOCKREF int
    ,Total float
)
AS BEGIN 
    DECLARE @Firma varchar(3), @Donem varchar(2)
    SELECT @Firma=Firma,@Donem=Donem FROM GN_FrmDnm WHERE Yil=YEAR(GETDATE())
    
    DECLARE @Reports TABLE (SOURCEINDEX smallint,STOCKREF int,Total float)
    DECLARE @SQLQuery nvarchar(4000)
	SET @SQLQuery=N'INSERT INTO @Reports (SOURCEINDEX ,STOCKREF ,Total)
    (SELECT     SFICHE.SOURCEINDEX, SLINE.STOCKREF, SUM(SLINE.AMOUNT) AS Total
	FROM         LG_'+@Firma+'_'+@Donem+'_INVOICE INV RIGHT OUTER JOIN
	                      LG_'+@Firma+'_'+@Donem+'_STLINE SLINE INNER JOIN
	                      LG_'+@Firma+'_'+@Donem+'_STFICHE SFICHE ON SLINE.STFICHEREF = SFICHE.LOGICALREF ON INV.LOGICALREF = SLINE.INVOICEREF
	WHERE     (SFICHE.CANCELLED = 0) AND (SFICHE.TRCODE = 1)
	GROUP BY SFICHE.SOURCEINDEX, SLINE.STOCKREF)'
    EXEC sp_executesql @SQLQuery
	INSERT @ItemsTotals  
	SELECT * FROM @Reports  
RETURN
END
Fonksiyonu procedure çevirerek işimi halletim ama varsa bir çözümü öğrenmek isterim.
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba Naile Hanım,

Bu konu hakkında sizinle daha önce viewtopic.php?t=12796 linkinde görüş alışverişinde bulunmuştuk. En son mesajımda bir fonksiyon içinde ikinci bir fonksiyon çalıştıramadığımı söylemiştim. Mssql izin vermiyor sanırım.
Bayağı bir çalışmıştık o zaman ama ben tam istediğim şekilde yapamamıştım.
Sanırım o zaman fonksiyonu kullananazsınız diye hata veriyordu.

Kolay gelsin.
http://www.aysbergbilgisayar.com
Logo Go özel eğitim, web tasarım, teknik servis
Cevapla