#sql #sql-server #sql-server-2008 #function
#sql #sql-сервер #sql-server-2008 #функция
Вопрос:
ALTER FUNCTION [dbo].[TabloGetir] (@id INT,
@ay INT,
@yil INT)
RETURNS TABLE
AS
RETURN
(SELECT ARACKM_ARAC_ID,
ARACKM_ID,
ARACKM_TARIHI,
ARACKM_KM,
A_PLAKA,
A_ID
FROM VARACKM
WHERE A_ID = @id
AND MONTH(ARACKM_TARIHI) = @ay
AND YEAR(ARACKM_TARIHI) = @yil)
Это моя табличная функция, и я продолжаю получать эту ошибку, может кто-нибудь, пожалуйста, помочь мне?
Вот где я это называю:
comm2 = New SqlCommand(@"select ARACKM_TARIHI, SUM(ARACKM_KM) AS TUTAR
from VARACKM
GROUP BY ARACKM_TARIHI
HAVING [dbo].[TabloGetir](@A_ID,@ay,@yil) ",conn2)
comm2.Parameters.Add("@A_ID", plakaId)
comm2.Parameters.Add("@ay", ay)
comm2.Parameters.Add("@yil", yil)
reader2 = comm2.ExecuteReader()
Комментарии:
1. Вы получаете эту ошибку при определении функции или при ее вызове?
2. я получаю эту ошибку при ее вызове
3. Поэтому, пожалуйста, покажите код, который его вызывает.
4. comm2 = Новая команда SqlCommand(«выберите ARACKM_TARIHI, СУММИРУЙТЕ (ARACKM_KM) КАК ЗНАЧЕНИЕ из ГРУППЫ VARACKM С ПОМОЩЬЮ ARACKM_TARIHI, ИМЕЮЩЕГО [dbo] . [TabloGetir](@A_ID,@ay,@yil) «, conn2)
5. Что вы пытаетесь сделать
HAVING [dbo].[TabloGetir](@A_ID,@ay,@yil)
? Он не ссылается ни на какие столбцы из таблицы.
Ответ №1:
Проблема заключается в having
предложении.
HAVING [dbo].[TabloGetir](@A_ID,@ay,@yil)
Во-первых, ваша функция возвращает таблицу, и having
предложение ожидает скаляр с каким-то сравнением. Во-вторых, у вас нет сравнения. Возможно, вы имеете в виду:
HAVING EXISTS (select 1 from [dbo].[TabloGetir](@A_ID,@ay,@yil) )