用视图的许多联接替换选择语句

时间:2019-01-05 00:21:16

标签: sql sql-server sql-view

我有一些select语句可以从多个表中获取数据,通常它们会运行多次以更新应用程序上的列表,以供用户查看数据。由于我是关于视图的整个故事的新手,因此我读了article,它说视图应该取代长查询,而只是虚拟表以更快地访问数据,我想知道如何以及是否应该我用视图代替这些冗长的查询。

这是我的一些查询

IF @Action = 'SELECTALL'
BEGIN
    SELECT hr.IdColaborador,  hr.MotivoCriacao, hr.IdReq, Nome, hcb.Email, hr.RefInterna, hi.Descricao AS InfoLog, hs.Descricao AS STATUS, hd.DataAbertura AS DataCriacao FROM hRequisicao AS hr    
    JOIN hColaborador AS hcb ON hcb.IdColaborador = hr.IdColaborador
    JOIN hStatus AS hs ON hs.IdStatus = hr.IdStatus
    JOIN hInfoLogistica hi ON hi.IdInfoLogistica = hr.IdInfoLogistica               
    JOIN hDataLog hd ON hd.IdReq = hr.IdReq
    WHERE hr.IdStatus != 6
END
IF @Action = 'SELECTALL_USERID'
BEGIN
    SELECT hr.IdColaborador, hr.IdReq, Nome, hcb.Email, hr.RefInterna, hs.Descricao AS STATUS, hl.DataAbertura AS DataCriacao, hi.Descricao AS InfoLog  FROM hRequisicao AS hr  
    JOIN hColaborador AS hcb ON hcb.IdColaborador = hr.IdColaborador
    JOIN hStatus AS hs ON hs.IdStatus = hr.IdStatus     
    JOIN hDataLog AS hl ON hl.IdReq = hr.IdReq
    JOIN hInfoLogistica AS hi ON hi.IdInfoLogistica = hr.IdInfoLogistica
    WHERE hr.IdColaborador = @IdColaborador AND hr.IdStatus != 6
END 
IF @Action = 'SELECT'
BEGIN
    SELECT IdReq, hr.MotivoCriacao, hr.IdCodeRequest, hr.IdColaborador, Nome, hcb.Email, Projecto, Desenho, Indice, CadenciaMensal, NumCOMDEV, RefCliente, RefInterna, QTDLancamentoFormas, CapacidadeReal, Peso,
           TipoCaixa, QTDPecasCaixa, UnidadeProducao, CelulaProducao, NumKanbansProducao, QTDComp, TipoMetodologia, QTDMetProd, hi.Descricao AS InfoLog FROM hRequisicao AS hr
    JOIN hCodeRequest AS hcr ON hr.IdCodeRequest = hcr.IdCodeRequest
    JOIN hCaixa AS hc ON  hr.IdCaixa = hc.IdCaixa
    JOIN hComponentes AS hcp ON hr.IdComp = hcp.IdComp
    JOIN hMetodologiaProducao AS hmp ON hr.IdMetProd = hmp.IdMetProd
    JOIN hColaborador AS hcb ON hcb.IdColaborador = hr.IdColaborador
    JOIN hInfoLogistica AS hi ON hi.IdInfoLogistica = hr.IdInfoLogistica
    WHERE IdReq = @IdReq
END 

我从没使用过视图,我真的很想尝试一次应用它们以习惯它们并了解它们的工作原理,但是我不确定何时,如何使用它们以及它们是否只是一种视图。占位符以隐藏长代码

0 个答案:

没有答案