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.
Fonksiyon ve procedurlerle alakalı
- sabanakman
- Kıdemli Üye
- Mesajlar: 3077
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
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. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
- sabanakman
- Kıdemli Üye
- Mesajlar: 3077
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
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. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
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
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.
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
Logo Go özel eğitim, web tasarım, teknik servis