Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我不能调用sql函数_Sql_Sql Server - Fatal编程技术网

我不能调用sql函数

我不能调用sql函数,sql,sql-server,Sql,Sql Server,我写了这个函数 ALTER FUNCTION dbo.MEDIAVTRINEW (@CODIGO VARCHAR(25), @YEAR VARCHAR(4), @TRI INT) RETURNS TABLE RETURN (SELECT ROUND(ISNULL(SUM(D2.D2_QUANT) / 3, 0), 2) AS MEDIA FROM SD2010 D2 WHERE D2.D_E_L_E_T_ = ''

我写了这个函数

ALTER FUNCTION dbo.MEDIAVTRINEW
    (@CODIGO VARCHAR(25), 
     @YEAR VARCHAR(4),    
     @TRI INT)
RETURNS TABLE   
    RETURN  (SELECT ROUND(ISNULL(SUM(D2.D2_QUANT) / 3, 0), 2) AS MEDIA
    FROM SD2010 D2  
    WHERE D2.D_E_L_E_T_ = ''        
      AND D2.D2_TES IN ('502', '506', '505')
      AND D2.D2_COD = @CODIGO  
      AND ((@TRI = 1 
            AND D2.D2_EMISSAO >= CONCAT(@YEAR, '01', '01')
            AND D2.D2_EMISSAO <= CONCAT(@YEAR, '03', '31')
           )
           OR
           (@TRI = 2 
            AND D2.D2_EMISSAO >= CONCAT(@YEAR, '04', '01')
            AND D2.D2_EMISSAO <= CONCAT(@YEAR, '06', '31')
           )
           OR
           (@TRI = 3 
            AND D2.D2_EMISSAO >= CONCAT(@YEAR, '07', '01')
            AND D2.D2_EMISSAO <= CONCAT(@YEAR, '09', '31')
           )
           OR
           (@TRI = 4 
            AND D2.D2_EMISSAO >= CONCAT(@YEAR, '10', '01')
            AND D2.D2_EMISSAO <= CONCAT(@YEAR, '12', '31')
           )
          )
     )
GO
Select * from dbo.MEDIAVTRINEW('001004','20171201',4)

PS:我单独执行了这个函数,抛出了参数,它成功了。

您需要使用
FROM
子句来调用表值函数。您的语法适用于标量函数

ALTER FUNCTION dbo.MEDIAVTRINEW
    (@CODIGO VARCHAR(25), 
     @YEAR VARCHAR(4),    
     @TRI INT)
RETURNS TABLE   
    RETURN  (SELECT ROUND(ISNULL(SUM(D2.D2_QUANT) / 3, 0), 2) AS MEDIA
    FROM SD2010 D2  
    WHERE D2.D_E_L_E_T_ = ''        
      AND D2.D2_TES IN ('502', '506', '505')
      AND D2.D2_COD = @CODIGO  
      AND ((@TRI = 1 
            AND D2.D2_EMISSAO >= CONCAT(@YEAR, '01', '01')
            AND D2.D2_EMISSAO <= CONCAT(@YEAR, '03', '31')
           )
           OR
           (@TRI = 2 
            AND D2.D2_EMISSAO >= CONCAT(@YEAR, '04', '01')
            AND D2.D2_EMISSAO <= CONCAT(@YEAR, '06', '31')
           )
           OR
           (@TRI = 3 
            AND D2.D2_EMISSAO >= CONCAT(@YEAR, '07', '01')
            AND D2.D2_EMISSAO <= CONCAT(@YEAR, '09', '31')
           )
           OR
           (@TRI = 4 
            AND D2.D2_EMISSAO >= CONCAT(@YEAR, '10', '01')
            AND D2.D2_EMISSAO <= CONCAT(@YEAR, '12', '31')
           )
          )
     )
GO
Select * from dbo.MEDIAVTRINEW('001004','20171201',4)

作为一个表值函数,我怀疑您需要一个交叉应用外部应用

示例

Select A.*
      ,B.*
 From  YourTable A
 Cross Apply dbo.MEDIAVTRINEW('001004','20171201',4) B
使用外部应用查看空值


用字段值替换参数

是否使用ms sql server?由于函数返回一个表,因此应在
FROM
子句中调用它<代码>从dbo.MEDIAVTRINEW('001004','20171201',4)中选择*既没有6月31日(06)也没有9月31日(09)-您应该修复这些错误