Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/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 server 2005 我想给一个函数一个参数,它的值是 具有 EMP码 像 选择EmpCode 来自Employee.tblEmp_人口统计 其中RecordStatus='present' 选择*,按EmpCode顺序按DATETAKE DESC作为RowNum在分区上的行数, 从Master.GradeMaster中选择GradeName,其中GradeCode=Grade,Deleted=0为Grade, 按等级划分的SUMMOUNT超额分配为EMP金额, SUMDependentAmount按等级超额分配为DepAmount, 0作为CheckNo 从[dbo]。[按日期选择机票详细信息]EmpDetails.EmpCode,getdate,其中yearDateTake=yeargetdate_Sql Server 2005 - Fatal编程技术网

Sql server 2005 我想给一个函数一个参数,它的值是 具有 EMP码 像 选择EmpCode 来自Employee.tblEmp_人口统计 其中RecordStatus='present' 选择*,按EmpCode顺序按DATETAKE DESC作为RowNum在分区上的行数, 从Master.GradeMaster中选择GradeName,其中GradeCode=Grade,Deleted=0为Grade, 按等级划分的SUMMOUNT超额分配为EMP金额, SUMDependentAmount按等级超额分配为DepAmount, 0作为CheckNo 从[dbo]。[按日期选择机票详细信息]EmpDetails.EmpCode,getdate,其中yearDateTake=yeargetdate

Sql server 2005 我想给一个函数一个参数,它的值是 具有 EMP码 像 选择EmpCode 来自Employee.tblEmp_人口统计 其中RecordStatus='present' 选择*,按EmpCode顺序按DATETAKE DESC作为RowNum在分区上的行数, 从Master.GradeMaster中选择GradeName,其中GradeCode=Grade,Deleted=0为Grade, 按等级划分的SUMMOUNT超额分配为EMP金额, SUMDependentAmount按等级超额分配为DepAmount, 0作为CheckNo 从[dbo]。[按日期选择机票详细信息]EmpDetails.EmpCode,getdate,其中yearDateTake=yeargetdate,sql-server-2005,Sql Server 2005,但我犯了个错误 Msg 4104,级别16,状态1,第11行无法绑定多部分标识符EmpDetails.EmpCode 我认为问题是您将列EmpDetails.EmpCode名称传递给表值函数而不是单个值的结果。您可以尝试以下方法: DECLARE @EmpCode nvarchar(100); SELECT TOP 1 @EmpCode = EmpCode FROM Employee.tblEmp_Demographics WHERE RecordStatus='pres

但我犯了个错误

Msg 4104,级别16,状态1,第11行无法绑定多部分标识符EmpDetails.EmpCode


我认为问题是您将列EmpDetails.EmpCode名称传递给表值函数而不是单个值的结果。您可以尝试以下方法:

DECLARE @EmpCode nvarchar(100);

SELECT TOP 1
       @EmpCode = EmpCode 
  FROM Employee.tblEmp_Demographics
 WHERE RecordStatus='present';

select *,ROW_NUMBER() OVER (PARTITION BY EmpCode ORDER BY DateTaken DESC) AS RowNum,    
(select GradeName From Master.GradeMaster where GradeCode=Grade And Deleted=0) As Grade,    
SUM(Amount) OVER(PARTITION BY Grade) AS EmpAmount,
SUM(DependentAmount) OVER(PARTITION BY Grade) As DepAmount,
0 As CheckNo 
from [dbo].[SELECT_AIRTICKET_DETAILS_BY_DATE](@EmpCode,getdate(),1) WHERE YEAR(DateTaken)=year(getdate());
如果希望从Employee.tblEmp_Demographics表中获得多个值的结果,可以迭代每个值,或者修改表值函数以返回包含所有EmpCode值的结果集,然后添加WHERE子句以根据需要过滤数据

编辑

可能是这样的—请注意,返回所有EmpCodes的修改函数少了一个参数:

select *,ROW_NUMBER() OVER (PARTITION BY EmpCode ORDER BY DateTaken DESC) AS RowNum,    
(select GradeName From Master.GradeMaster where GradeCode=Grade And Deleted=0) As Grade,    
SUM(Amount) OVER(PARTITION BY Grade) AS EmpAmount,
SUM(DependentAmount) OVER(PARTITION BY Grade) As DepAmount,
0 As CheckNo 
  FROM [dbo].[SELECT_AIRTICKET_DETAILS_BY_DATE](getdate(),1) AS [Tickets]
 INNER JOIN Employee.tblEmp_Demographics
         ON tblEmp_Demographics.EmpCode = [Tickets].EmpCode
        AND tblEmp_Demographics.RecordStatus = 'present'
 WHERE YEAR(DateTaken) = year(getdate());

使用此解决方案,函数将返回所有EMP代码,但是我们通过在Employee.tblEmp_Demographics表上执行内部联接来过滤掉不必要的数据。

实际上,我想从Employee.tblEmp_Demographics中给出一个值作为函数的参数。第一个SELECT语句从Employee.tblEmp_Demographics表中获取该值,并将其保存在@EmpCode变量中,即随后在第一个参数中传递到[SELECT_AIRTICKET_DETAILS_BY_DATE]函数。Employee中的所有empcodes都需要它。tblEmp_Demographics我已更新了答案,以包含一个示例,说明您将调用表值函数的修改版本。如果由于某种原因无法修改函数,那么我认为唯一的替代方法是递归地遍历Employee.tblEmp_Demographics表中的每个值。虽然这不是最好的方法,但SQL Server和递归并不是很好的组合。