【问题标题】:An expression of non-boolean type specified in a context where a condition is expected, near ')'. ERROR在预期条件的上下文中指定的非布尔类型的表达式,靠近 ')'。错误
【发布时间】:2014-06-28 12:35:18
【问题描述】:
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()

【问题讨论】:

  • 在定义函数或调用函数时是否出现此错误?
  • 我在调用它时收到此错误
  • 所以请显示调用它的代码。
  • 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)
  • 你想用HAVING [dbo].[TabloGetir](@A_ID,@ay,@yil)做什么?它不引用表中的任何列。

标签: sql sql-server sql-server-2008 function


【解决方案1】:

问题在于having 子句。

HAVING [dbo].[TabloGetir](@A_ID,@ay,@yil) 

首先,您的函数返回一个表,having 子句需要一个带有某种比较的标量。其次,你没有可比性。也许你的意思是:

HAVING EXISTS (select 1 from [dbo].[TabloGetir](@A_ID,@ay,@yil) )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    相关资源
    最近更新 更多