Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala galera! beleza?
Tenho uma proc assim:
...
SELECT * FROM (
SELECT ROW_NUMBER() OVER(ORDER BY LinCod, TLiCod ASC) AS ID, LinCod, TLiCodComo faço isso?
Tipo assim:
If @linCod is not null
begin
-- Fica WHERE GarCod = @garCod AND Arecod = @areCod AND Empcod = @empCod
END
ELSE
-- Fica WHERE linCod = @linCod
Alguém pode me dar uma luz por favor?
Abraços!!!!
aqui tem um exemplo: http://forum.imasters.com.br/index.php?showtopic=220823
e aqui um pouco diferente: http://forum.imasters.com.br/index.php?showtopic=223859
Vou dar uma olhada nos exemplos, mas fiz uma tentativa aqui e funcionou! Vou dar uma olhada na performance pra ver se vale a pena!
Ficou assim:
>
...
SELECT * FROM (
SELECT ROW_NUMBER() OVER(ORDER BY LinCod, TLiCod ASC) AS ID, LinCod, TLiCod
FROM VSLinGar (NOLOCK)
WHERE GarCod = @garCod AND Arecod = @areCod AND Empcod = @empCod and (linCod = @linCod or @linCod is null)
) AS linhas
WHERE id BETWEEN(((@paginaAtual - 1) @registros) + 1) AND (@paginaAtual @registros)
Aí se o 'cara' informar o parâmetro @linCod a query faz a busca pra mim. Se ele não informa ela traz completo.
Valew cara!
Bom... no fim das contas minha proc ficou assim:
CREATE PROC sp_SLinGar_Pag (
@paginaAtual INT,
@registros INT,
@garCod INT,
@areCod INT,
@empCod INT,
@linCod VARCHAR(4)
) AS
BEGIN
SELECT * FROM (
SELECT ROW_NUMBER() OVER(ORDER BY LinCod, TLiCod ASC) AS ID, LinCod, TLiCod
FROM VSLinGar (NOLOCK)
WHERE GarCod = @garCod AND Arecod = @areCod AND Empcod = @empCod and (linCod = @linCod or @linCod is null)
) AS linhas
WHERE id BETWEEN(((@paginaAtual - 1) @registros) + 1) AND (@paginaAtual @registros)
END
Obrigado pela ajuda.
Abraços!
para facilitar eu costumo criar uma string e vou montando o script do comando que desejo. dessa forma posso colocar If's e tratamentos diversos, e no final o comando fica enxuto.
exemplo:
DECLARE @v_sql VARCHAR(8000); -- Script SQL a ser executado
SET @v_sql = '';
SET @v_sql = @v_sql + ' SELECT pv.sigla_rede AS [Rede]' + CHAR(13);
SET @v_sql = @v_sql + ' , pv.sigla_master AS [Master]' + CHAR(13);
SET @v_sql = @v_sql + ' , pv.codigo_empresa AS [Nº]' + CHAR(13);
SET @v_sql = @v_sql + ' , pv.nome_empresa AS [Loja]' + CHAR(13);
SET @v_sql = @v_sql + ' , pv.sigla_indicador AS [KPI]' + CHAR(13);
SET @v_sql = @v_sql + ' , pv.data' + CHAR(13);
SET @v_sql = @v_sql + ' , [SAL], [VIA], [DRI], [DEL], [FES], [BAL], [SEL], [BFS], [QUI], [XXX], [TOT]' + CHAR(13);
SET @v_sql = @v_sql + ' FROM (SELECT v.sigla_rede' + CHAR(13);
SET @v_sql = @v_sql + ' , v.sigla_master' + CHAR(13);
SET @v_sql = @v_sql + ' , v.codigo_empresa' + CHAR(13);
SET @v_sql = @v_sql + ' , v.nome_empresa' + CHAR(13);
SET @v_sql = @v_sql + ' , f.sigla_indicador' + CHAR(13);
SET @v_sql = @v_sql + ' , f.sigla_ponto_venda' + CHAR(13);
SET @v_sql = @v_sql + ' , RIGHT(CONVERT(VARCHAR, f.data, 103), 7) AS [data]' + CHAR(13);
SET @v_sql = @v_sql + ' , CAST(f.valor AS NUMERIC(13,2)) AS [valor]' + CHAR(13);
SET @v_sql = @v_sql + ' FROM ECDADOS.online.FECHAMENTO f' + CHAR(13);
SET @v_sql = @v_sql + ' LEFT JOIN ECENTRAL.dbo.V_REDE_MASTER_EMPRESA v ON (v.sigla_rede = f.sigla_rede) AND (v.chave_empresa = f.chave_empresa)' + CHAR(13);
SET @v_sql = @v_sql + ' WHERE (f.sigla_rede = ''' + @i_rede + ''')' + CHAR(13);
IF (@i_lojas <> '')
SET @v_sql = @v_sql + ' AND (v.codigo_empresa IN (' + @i_lojas + '))' + CHAR(13);
SET @v_sql = @v_sql + ' AND (f.sigla_indicador = ''' + @i_kpi + ''')' + CHAR(13);
SET @v_sql = @v_sql + ' AND (f.sigla_origem = ''' + @i_origem + ''')' + CHAR(13);
SET @v_sql = @v_sql + ' AND (f.sigla_periodo = ''MES'')' + CHAR(13);
SET @v_sql = @v_sql + ' AND (YEAR(f.data) = ' + @i_ano + ')' + CHAR(13);
SET @v_sql = @v_sql + ' AND (MONTH(f.data) IN (' + @i_meses + '))) x' + CHAR(13);
SET @v_sql = @v_sql + ' PIVOT (SUM(x.valor)' + CHAR(13);
SET @v_sql = @v_sql + ' FOR x.sigla_ponto_venda IN ([SAL], [VIA], [DRI], [DEL], [FES], [BAL], [SEL], [BFS], [QUI], [XXX], [TOT])) pv' + CHAR(13);
SET @v_sql = @v_sql + 'ORDER BY pv.sigla_rede, pv.codigo_empresa, pv.data' + CHAR(13);
EXECUTE (@v_sql);
Opa... faltou explicar o que pretendo! rs...
Basicamente é isto: Se o 'cara' informar o parâmetro @linCod então minha query retorna somente as informações q o 'cara' pediu. Se ele não informar (se ela for NULL) então a query retorna a busca completa.
É 'flórida' de explicar, mas é isso aí! rs...
ABRAX!!!!