【问题标题】:Only approved documents should be shown只应显示批准的文件
【发布时间】:2013-11-25 19:29:39
【问题描述】:

我尝试了这个存储过程来显示文档:

ALTER procedure [dbo].[financespmanager] 
     @DepID int
as
    SELECT     
        dbo.DocumentInfo.DocID as DocumentID, 
        dbo.DocumentInfo.DocName as DocumentName, 
        dbo.DocumentInfo.Uploadfile as FileUploaded, 
        dbo.Department.DepType as Department, 
        dbo.DocType.DocType as Document,
        dbo.DocumentInfo.UploadedBy as UploadedBy, 
        dbo.Approval.AppoveBy, 
        dbo.ApproveType.ApproveType as Status
    FROM         
        dbo.DocumentInfo 
    INNER JOIN
        dbo.Approval ON dbo.DocumentInfo.DocID = dbo.Approval.DocID
    INNER JOIN
        dbo.ApproveType ON dbo.Approval.ApproveID = dbo.ApproveType.ApproveID 
    INNER JOIN
        dbo.Department ON dbo.DocumentInfo.DepID = dbo.Department.DepID
    INNER JOIN
        dbo.DocType ON dbo.DocumentInfo.DocTypeID = dbo.DocType.DocTypeID
    WHERE     
        DocumentInfo.DepID = @DepID 

现在当我测试查询时,它会像这样显示我

DocumentID  DocumentName  FileUploaded    Departmen   UploadedBy   AppoveBy    Status
 25       css           dsfsdf.docx     Computer    edward       halten      Rejected
 18       hr            HR.docx         Computer    john         halten      Approved
 19       eco           eco 2.docx      Computer    kety         halten      Rejected
 24       plan          December8.pdf   Computer    edward       halten      Approved

现在我只想显示已批准的文件,而不是拒绝和待处理的文件

我该怎么做?

【问题讨论】:

    标签: sql stored-procedures sql-server-2008-r2


    【解决方案1】:

    您只需要在 WHERE 子句中添加一个附加条件:

    WHERE     
        DocumentInfo.DepID = @DepID 
        AND dbo.ApproveType.ApproveType = 'Approved'
    

    应该可以的。

    【讨论】:

    • 当我尝试查询时,它显示错误“将 varchar 值 'Approve' 转换为数据类型 int 时转换失败”
    • @user2931015:查看我的更新 - 您可能有一个名为 Status 类型为 int 的实际列 - 您还使用 Status 作为该 dbo.ApproveType.ApproveType 列上的列别名 - 那是相当混乱,我会说....
    • 当我像这样使用 AND St​​atus = 'Approve' 然后它显示错误 Ambiguous column name 'Status'。当我像这样使用 ApproveType.ApproveID='Approve' 然后它显示错误将 varchar 值“批准”转换为数据类型 int 时转换失败
    • @user2931015,这正是我的回答!
    • 是的,我知道@christiandev ;)
    【解决方案2】:

    试试……

    AND ApproveType.ApproveType = 'Approved'where 子句中。

    或者,更改存储过程以采用第二个参数...

    ALTER procedure [dbo].[financespmanager] 
         @DepID int,
         @Status varchar(30) = 'Approved'
    as
    --rest of sp
    WHERE 
    DocumentInfo.DepID = @DepID 
    AND ApproveType.ApproveType = @Status
    

    默认为Approved,但您也可以传入另一个值来覆盖...

    EXEC [dbo].[financespmanager] @DepID = n, @Status = 'Rejected'
    

    这将允许您“按原样”使用 SP,但也可以灵活地覆盖。

    【讨论】:

    • @user2931015,当您使用status 对您不起作用时,您没有看到我的回答吗?
    • @user2931015,我的意思是我已经用正确的版本回答了,但是你接受另一个答案经过编辑以匹配我的...无论如何,你接受什么!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多