Sql UDF表UDV还是标量UDF?

Sql UDF表UDV还是标量UDF?,sql,ssrs-2008,user-defined-functions,Sql,Ssrs 2008,User Defined Functions,我会尽我最大的努力使这个问题比我上一次的惨败更好。我得到了一个可怕的>“找不到列“dbo”或用户定义函数或聚合“dbo.primontavgprice”,或者名称不明确。您没有显示from子句,但创建函数的数据库是它的一部分吗 如果您完全限定名称(包括数据库)是否有效 您是否独立测试了以下功能: select [dbo].[PriMonthAvgPrice] ('01/01/2011', '02/01/2011', 'test') 注意:当然,您会使用一些实际值来返回结果 请运行此命令并告诉我

我会尽我最大的努力使这个问题比我上一次的惨败更好。我得到了一个可怕的>“找不到列“dbo”或用户定义函数或聚合“dbo.primontavgprice”,或者名称不明确。您没有显示from子句,但创建函数的数据库是它的一部分吗

如果您完全限定名称(包括数据库)是否有效

您是否独立测试了以下功能:

select [dbo].[PriMonthAvgPrice] ('01/01/2011', '02/01/2011', 'test')
注意:当然,您会使用一些实际值来返回结果

请运行此命令并告诉我们返回的值:

 SELECT Actual_Sales_Dollars,Actual_Volume, pls.PLant_code          
 FROM   woodproduction.dbo.plywood_layup_sales pls         
 WHERE  Production_Date between '09-01-2011'  and  '09-30-2011'          
        and actual_volume <> 0      
选择实际销售额、实际数量、工厂代码
来自woodproduction.dbo.胶合板\堆放\销售请
其中,生产日期介于“2011年1月9日”和“2011年9月30日”之间
和实际卷0

那里也有来自子句的
吗?我有点怀疑,因为我看到一个表引用在你的函数中有一个数据库名(
woodproduction.dbo.collate\u layup\u sales
)。你是在创建函数的同一个数据库中运行这个查询吗?请。[实际销售额]/pls.[实际销售额])=如果您的两列都是整数,请注意整数数学。此外,我通常在任何division中加入一个除以零的检查,以便在底部数字为0或null时不会发出警报。您知道数据,可能不需要它,但这是一个好习惯。很多时候,我都遇到了意外的零。SELECT*不应在产品中使用离子代码,尤其是当存在连接时。这是低效的,会导致数据库在整个网络中发送的信息超过需要的数量(连接字段重复)@HLGEM我也这么认为,整个查询中有很多联接。我在本报告中为另一个数据集做了一个基本的自定义项,但它不涉及使用这样的查询。它只是一个日期自定义项。对不起@JNK。我知道我会错过一些东西。
来自woodproduction.dbo.collate\u layup\u sales请内部联接@Production p n p.plant_编号=pls.工厂编号和p.生产日期=pls.生产日期,其中月份(p.生产日期)=月份(@monthtodate)请注意:我是。这个查询也在我对数据集的主查询中。但在这种情况下,UDF会获取上个月末的数据,并将其插入一个设置为返回MTD的数据集中。所以我被告知这是最好的方法。我试着尽我所能模仿以前的UDF。我做到了。什么呃,对不对,这是另一回事。目前我得到了空值。我知道查询本身可以工作,所以我不确定为什么我会得到空值。我的老板说这很容易。当然,如果我有超过3个月的SQL,那么基本SQL就是这样。所以当你在上面的选择中运行udf代码时,你会得到空值>@HGLEM是的。但是我也可能是设置错误。因为这是他们在学校里不教的东西,至少是我的,我在没有其他sql人员的时候用谷歌搜索所有东西。现在这种情况很常见。我想我设置这个测试是对的:`declare@date1 datetime declare@date2 datetime set@date1='09-01-2011'set@date2='09-30-2011“从woodproduction.dbo.胶合板堆放销售pls中选择工厂代码、实际数量、dbo.PriMonthAvgPrice(@date1、@date2,请选择工厂代码)作为“PriMoAvgPrice”,其中生产日期介于@date1和@date2之间的“AVGPRICE retns NULL”
select [dbo].[PriMonthAvgPrice] ('01/01/2011', '02/01/2011', 'test')
 SELECT Actual_Sales_Dollars,Actual_Volume, pls.PLant_code          
 FROM   woodproduction.dbo.plywood_layup_sales pls         
 WHERE  Production_Date between '09-01-2011'  and  '09-30-2011'          
        and actual_volume <> 0