Выражение некулевого типа, указанное в контексте, где ожидается условие, рядом с ‘)’. ОШИБКА

#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) )