SQL - Ayuda con procedimiento almacenado

 
Vista:
sin imagen de perfil

Ayuda con procedimiento almacenado

Publicado por Martin Sequeira (4 intervenciones) el 26/01/2018 19:20:41
Hola saludos a todos, tengo el siguiente procedimiento alamacenado que lo utilizo para imprimir ticket de ventas pero al factura se me dilta mucho quiero saber si hay una mejor manera de mejorarlo, gracias de antemano.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
USE [BDADMIN]
GO
/****** Object:  StoredProcedure [dbo].[Sp_RptTicket]    Script Date: 26/01/2018 12:19:13 p.m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- Batch submitted through debugger: SQLQuery4.sql|7|0|C:\Users\ADMINI~1\AppData\Local\Temp\~vs44AE.sql
ALTER PROCEDURE [dbo].[Sp_RptTicket]
	AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
 SET NOCOUNT ON;
 SELECT
      TOP (100) PERCENT dbo.Tarjeta_Movimientos.CODIGOEMPRESA, dbo.Tarjeta_Movimientos.CODIGOBODEGA, dbo.Tarjeta_Movimientos.CODIGOSERIE,
      dbo.Tarjeta_Movimientos.NODOCUMENTO, dbo.Tarjeta_Movimientos.FECHA, dbo.Tarjeta_Movimientos.TIP_DOC, dbo.Tipos_Documentos.ABREVIATURA,
      dbo.Tarjeta_Movimientos.TASACAMBIO, dbo.Tarjeta_Movimientos.REFERENCIA AS REFERENCIA2,
      CASE dbo.Tarjeta_Movimientos.TIP_MOV WHEN 3 THEN dbo.Tarjeta_Movimientos.NombreCliente WHEN 9 THEN dbo.Tarjeta_Movimientos.NombreCliente ELSE dbo.Tarjeta_Movimientos.REFERENCIA
       END AS REFERENCIA, dbo.Tarjeta_Movimientos.CONCEPTO, dbo.Detalle_Tarjeta_Movimientos.CODIGOPRODUCTO, dbo.Producto.NOMBREPRODUCTO,
      ISNULL(CASE SIGN(dbo.Detalle_Tarjeta_Movimientos.CANTIDAD) WHEN 1 THEN dbo.Detalle_Tarjeta_Movimientos.CANTIDAD END, 0) AS ENTRADAS,
      ISNULL(CASE SIGN(dbo.Detalle_Tarjeta_Movimientos.CANTIDAD) WHEN - 1 THEN - dbo.Detalle_Tarjeta_Movimientos.CANTIDAD END, 0) AS SALIDAS,
      ISNULL(CASE SIGN(dbo.Detalle_Tarjeta_Movimientos.CANTIDAD)
      WHEN 1 THEN dbo.Detalle_Tarjeta_Movimientos.CANTIDAD * dbo.Detalle_Tarjeta_Movimientos.COSTOPROMEDIOC END, 0) AS TOTALENTRADAS,
      ISNULL(CASE SIGN(dbo.Detalle_Tarjeta_Movimientos.CANTIDAD)
      WHEN - 1 THEN - dbo.Detalle_Tarjeta_Movimientos.CANTIDAD * dbo.Detalle_Tarjeta_Movimientos.COSTOPROMEDIOC END, 0) AS TOTALSALIDAS,
      dbo.Detalle_Tarjeta_Movimientos.COSTOPROMEDIOC, dbo.Detalle_Tarjeta_Movimientos.TOTAL, dbo.Producto.STOCKMINIMOPRODUCTO,
      dbo.Producto.STOCKMAXIMOPRODUCTO, dbo.Producto.UBICACIONPRODUCTO1, dbo.Producto.UBICACIONPRODUCTO2,
      ABS(dbo.Detalle_Tarjeta_Movimientos.CANTIDAD) AS CANTIDAD, dbo.Tarjeta_Movimientos.IDNUM, dbo.Detalle_Tarjeta_Movimientos.NFILA,
      dbo.Tarjeta_Movimientos.CODIGOCLIENTE, dbo.Tarjeta_Movimientos.NOMBRECLIENTE, dbo.Tarjeta_Movimientos.PLAZO, dbo.Tarjeta_Movimientos.TOTALFACTURA,
      dbo.Tarjeta_Movimientos.TIP_MOV, dbo.Detalle_Tarjeta_Movimientos.DESCUENTOP, dbo.Detalle_Tarjeta_Movimientos.DESCUENTO,
      dbo.Detalle_Tarjeta_Movimientos.PRECIONETO, dbo.Detalle_Tarjeta_Movimientos.SUBTOTAL, dbo.Detalle_Tarjeta_Movimientos.IVA,
      dbo.Detalle_Tarjeta_Movimientos.PRECIO, dbo.Detalle_Tarjeta_Movimientos.PRECIO_REAL, dbo.Tarjeta_Movimientos.ANULAR, dbo.Empresa.NOMBREEMPRESA,
      dbo.Empresa.DIRECCIONEMPRESA, dbo.Empresa.TELEFONOEMPRESA, dbo.Empresa.CIUDADEMPRESA, dbo.Empresa.RUCEMPRESA, dbo.Empresa.DGIEMPRESA,
      dbo.Vendedor.NOMBREVENDEDOR, UPPER(dbo.Tipos_Documentos.NOMBREABREVIATURA) AS TIPOPAGO, dbo.FnTOTALPAGADO(dbo.Tarjeta_Movimientos.IDNUM) AS TOTALPAGADO,
      dbo.FnCambio(dbo.Tarjeta_Movimientos.IDNUM) AS CAMBIO
FROM         dbo.Tarjeta_Movimientos INNER JOIN
      dbo.Detalle_Tarjeta_Movimientos ON dbo.Tarjeta_Movimientos.IDNUM = dbo.Detalle_Tarjeta_Movimientos.IDNUM INNER JOIN
      dbo.Tipos_Documentos ON dbo.Tarjeta_Movimientos.TIP_DOC = dbo.Tipos_Documentos.TIP_DOC INNER JOIN
      dbo.Producto ON dbo.Detalle_Tarjeta_Movimientos.CODIGOPRODUCTO = dbo.Producto.CODIGOPRODUCTO INNER JOIN
      dbo.Empresa ON dbo.Tarjeta_Movimientos.CODIGOEMPRESA = dbo.Empresa.CODIGOEMPRESA INNER JOIN
      dbo.Vendedor ON dbo.Tarjeta_Movimientos.CODIGOVENDEDOR = dbo.Vendedor.CODIGOVENDEDOR
END
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Ayuda con procedimiento almacenado

Publicado por Isaias (1921 intervenciones) el 26/01/2018 20:08:31
El tiempo de respuesta, se da por diferentes factores

Indices en las tablas
Base TEMPDB, configuracion
Memoria asignada a SQL Server
Procesadores

etc, etc, etc, muchos etc.

¿Puedes compartirnos el PLAN DE EJECUCION de dicho query?

Como es un simple SELECT, solo ejecuta:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
SELECT
TOP (100) PERCENT dbo.Tarjeta_Movimientos.CODIGOEMPRESA, dbo.Tarjeta_Movimientos.CODIGOBODEGA, dbo.Tarjeta_Movimientos.CODIGOSERIE,
dbo.Tarjeta_Movimientos.NODOCUMENTO, dbo.Tarjeta_Movimientos.FECHA, dbo.Tarjeta_Movimientos.TIP_DOC, dbo.Tipos_Documentos.ABREVIATURA,
dbo.Tarjeta_Movimientos.TASACAMBIO, dbo.Tarjeta_Movimientos.REFERENCIA AS REFERENCIA2,
CASE dbo.Tarjeta_Movimientos.TIP_MOV WHEN 3 THEN dbo.Tarjeta_Movimientos.NombreCliente WHEN 9 THEN dbo.Tarjeta_Movimientos.NombreCliente ELSE dbo.Tarjeta_Movimientos.REFERENCIA
END AS REFERENCIA, dbo.Tarjeta_Movimientos.CONCEPTO, dbo.Detalle_Tarjeta_Movimientos.CODIGOPRODUCTO, dbo.Producto.NOMBREPRODUCTO,
ISNULL(CASE SIGN(dbo.Detalle_Tarjeta_Movimientos.CANTIDAD) WHEN 1 THEN dbo.Detalle_Tarjeta_Movimientos.CANTIDAD END, 0) AS ENTRADAS,
ISNULL(CASE SIGN(dbo.Detalle_Tarjeta_Movimientos.CANTIDAD) WHEN - 1 THEN - dbo.Detalle_Tarjeta_Movimientos.CANTIDAD END, 0) AS SALIDAS,
ISNULL(CASE SIGN(dbo.Detalle_Tarjeta_Movimientos.CANTIDAD)
WHEN 1 THEN dbo.Detalle_Tarjeta_Movimientos.CANTIDAD * dbo.Detalle_Tarjeta_Movimientos.COSTOPROMEDIOC END, 0) AS TOTALENTRADAS,
ISNULL(CASE SIGN(dbo.Detalle_Tarjeta_Movimientos.CANTIDAD)
WHEN - 1 THEN - dbo.Detalle_Tarjeta_Movimientos.CANTIDAD * dbo.Detalle_Tarjeta_Movimientos.COSTOPROMEDIOC END, 0) AS TOTALSALIDAS,
dbo.Detalle_Tarjeta_Movimientos.COSTOPROMEDIOC, dbo.Detalle_Tarjeta_Movimientos.TOTAL, dbo.Producto.STOCKMINIMOPRODUCTO,
dbo.Producto.STOCKMAXIMOPRODUCTO, dbo.Producto.UBICACIONPRODUCTO1, dbo.Producto.UBICACIONPRODUCTO2,
ABS(dbo.Detalle_Tarjeta_Movimientos.CANTIDAD) AS CANTIDAD, dbo.Tarjeta_Movimientos.IDNUM, dbo.Detalle_Tarjeta_Movimientos.NFILA,
dbo.Tarjeta_Movimientos.CODIGOCLIENTE, dbo.Tarjeta_Movimientos.NOMBRECLIENTE, dbo.Tarjeta_Movimientos.PLAZO, dbo.Tarjeta_Movimientos.TOTALFACTURA,
dbo.Tarjeta_Movimientos.TIP_MOV, dbo.Detalle_Tarjeta_Movimientos.DESCUENTOP, dbo.Detalle_Tarjeta_Movimientos.DESCUENTO,
dbo.Detalle_Tarjeta_Movimientos.PRECIONETO, dbo.Detalle_Tarjeta_Movimientos.SUBTOTAL, dbo.Detalle_Tarjeta_Movimientos.IVA,
dbo.Detalle_Tarjeta_Movimientos.PRECIO, dbo.Detalle_Tarjeta_Movimientos.PRECIO_REAL, dbo.Tarjeta_Movimientos.ANULAR, dbo.Empresa.NOMBREEMPRESA,
dbo.Empresa.DIRECCIONEMPRESA, dbo.Empresa.TELEFONOEMPRESA, dbo.Empresa.CIUDADEMPRESA, dbo.Empresa.RUCEMPRESA, dbo.Empresa.DGIEMPRESA,
dbo.Vendedor.NOMBREVENDEDOR, UPPER(dbo.Tipos_Documentos.NOMBREABREVIATURA) AS TIPOPAGO, dbo.FnTOTALPAGADO(dbo.Tarjeta_Movimientos.IDNUM) AS TOTALPAGADO,
dbo.FnCambio(dbo.Tarjeta_Movimientos.IDNUM) AS CAMBIO
FROM dbo.Tarjeta_Movimientos INNER JOIN
dbo.Detalle_Tarjeta_Movimientos ON dbo.Tarjeta_Movimientos.IDNUM = dbo.Detalle_Tarjeta_Movimientos.IDNUM INNER JOIN
dbo.Tipos_Documentos ON dbo.Tarjeta_Movimientos.TIP_DOC = dbo.Tipos_Documentos.TIP_DOC INNER JOIN
dbo.Producto ON dbo.Detalle_Tarjeta_Movimientos.CODIGOPRODUCTO = dbo.Producto.CODIGOPRODUCTO INNER JOIN
dbo.Empresa ON dbo.Tarjeta_Movimientos.CODIGOEMPRESA = dbo.Empresa.CODIGOEMPRESA INNER JOIN
dbo.Vendedor ON dbo.Tarjeta_Movimientos.CODIGOVENDEDOR = dbo.Vendedor.CODIGOVENDEDOR

¿Cuantos registros te devuelve?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda con procedimiento almacenado

Publicado por Martin Sequeira (4 intervenciones) el 26/01/2018 20:22:14
DISCULPEN SOY NUEVO EN ESTO
ME DEVUELVE LA CANTIDAD QUE SE FACTUREN
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Ayuda con procedimiento almacenado

Publicado por Isaias (1921 intervenciones) el 26/01/2018 20:30:07
¿Cuantos registros?

Y de esto?
Indices en las tablas
Base TEMPDB, configuracion
Memoria asignada a SQL Server
Procesadores

¿Y el PLAN DE EJECUCION?

Pequeño detalle

¿Que motor de base de datos estas usando?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda con procedimiento almacenado

Publicado por Martin Sequeira (4 intervenciones) el 26/01/2018 20:36:49
ESTE ES EL PLAN
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?xml version="1.0" encoding="utf-16"?>
<ShowPlanXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.2" Build="12.0.2000.8" xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan">
  <BatchSequence>
    <Batch>
      <Statements>
        <StmtUseDb StatementCompId="1" StatementId="1" StatementText="USE [BDADMIN]&#xD;&#xA;" StatementType="USE DATABASE" RetrievedFromCache="false" Database="[BDADMIN]" />
      </Statements>
    </Batch>
    <Batch>
      <Statements>
        <StmtSimple StatementCompId="1" StatementId="1" StatementText="/****** Object:  StoredProcedure [dbo].[Sp_RptTicket]    Script Date: 26/01/2018 01:30:36 p.m. ******/&#xD;&#xA;SET ANSI_NULLS ON&#xD;&#xA;" StatementType="SET ON/OFF" RetrievedFromCache="false" />
      </Statements>
    </Batch>
    <Batch>
      <Statements>
        <StmtSimple StatementCompId="0" StatementId="1" StatementText="-- Batch submitted through debugger: SQLQuery4.sql|7|0|C:\Users\ADMINI~1\AppData\Local\Temp\~vs44AE.sql&#xD;&#xA;ALTER PROCEDURE [dbo].[Sp_RptTicket]&#xD;&#xA;	AS&#xD;&#xA;BEGIN&#xD;&#xA;	-- SET NOCOUNT ON added to prevent extra result sets from&#xD;&#xA;	-- interfering with SELECT statements.&#xD;&#xA; SET NOCOUNT ON;&#xD;&#xA; SELECT  &#xD;&#xA;                      TOP (100) PERCENT dbo.Tarjeta_Movimientos.CODIGOEMPRESA, dbo.Tarjeta_Movimientos.CODIGOBODEGA, dbo.Tarjeta_Movimientos.CODIGOSERIE, &#xD;&#xA;                      dbo.Tarjeta_Movimientos.NODOCUMENTO, dbo.Tarjeta_Movimientos.FECHA, dbo.Tarjeta_Movimientos.TIP_DOC, dbo.Tipos_Documentos.ABREVIATURA, &#xD;&#xA;                      dbo.Tarjeta_Movimientos.TASACAMBIO, dbo.Tarjeta_Movimientos.REFERENCIA AS REFERENCIA2, &#xD;&#xA;                      CASE dbo.Tarjeta_Movimientos.TIP_MOV WHEN 3 THEN dbo.Tarjeta_Movimientos.NombreCliente WHEN 9 THEN dbo.Tarjeta_Movimientos.NombreCliente ELSE dbo.Tarjeta_Movimientos.REFERENCIA&#xD;&#xA;                       END AS REFERENCIA, dbo.Tarjeta_Movimientos.CONCEPTO, dbo.Detalle_Tarjeta_Movimientos.CODIGOPRODUCTO, dbo.Producto.NOMBREPRODUCTO, &#xD;&#xA;                      ISNULL(CASE SIGN(dbo.Detalle_Tarjeta_Movimientos.CANTIDAD) WHEN 1 THEN dbo.Detalle_Tarjeta_Movimientos.CANTIDAD END, 0) AS ENTRADAS, &#xD;&#xA;                      ISNULL(CASE SIGN(dbo.Detalle_Tarjeta_Movimientos.CANTIDAD) WHEN - 1 THEN - dbo.Detalle_Tarjeta_Movimientos.CANTIDAD END, 0) AS SALIDAS, &#xD;&#xA;                      ISNULL(CASE SIGN(dbo.Detalle_Tarjeta_Movimientos.CANTIDAD) &#xD;&#xA;                      WHEN 1 THEN dbo.Detalle_Tarjeta_Movimientos.CANTIDAD * dbo.Detalle_Tarjeta_Movimientos.COSTOPROMEDIOC END, 0) AS TOTALENTRADAS, &#xD;&#xA;                      ISNULL(CASE SIGN(dbo.Detalle_Tarjeta_Movimientos.CANTIDAD) &#xD;&#xA;                      WHEN - 1 THEN - dbo.Detalle_Tarjeta_Movimientos.CANTIDAD * dbo.Detalle_Tarjeta_Movimientos.COSTOPROMEDIOC END, 0) AS TOTALSALIDAS, &#xD;&#xA;                      dbo.Detalle_Tarjeta_Movimientos.COSTOPROMEDIOC, dbo.Detalle_Tarjeta_Movimientos.TOTAL, dbo.Producto.STOCKMINIMOPRODUCTO, &#xD;&#xA;                      dbo.Producto.STOCKMAXIMOPRODUCTO, dbo.Producto.UBICACIONPRODUCTO1, dbo.Producto.UBICACIONPRODUCTO2, &#xD;&#xA;                      ABS(dbo.Detalle_Tarjeta_Movimientos.CANTIDAD) AS CANTIDAD, dbo.Tarjeta_Movimientos.IDNUM, dbo.Detalle_Tarjeta_Movimientos.NFILA, &#xD;&#xA;                      dbo.Tarjeta_Movimientos.CODIGOCLIENTE, dbo.Tarjeta_Movimientos.NOMBRECLIENTE, dbo.Tarjeta_Movimientos.PLAZO, dbo.Tarjeta_Movimientos.TOTALFACTURA, &#xD;&#xA;                      dbo.Tarjeta_Movimientos.TIP_MOV, dbo.Detalle_Tarjeta_Movimientos.DESCUENTOP, dbo.Detalle_Tarjeta_Movimientos.DESCUENTO, &#xD;&#xA;                      dbo.Detalle_Tarjeta_Movimientos.PRECIONETO, dbo.Detalle_Tarjeta_Movimientos.SUBTOTAL, dbo.Detalle_Tarjeta_Movimientos.IVA, &#xD;&#xA;                      dbo.Detalle_Tarjeta_Movimientos.PRECIO, dbo.Detalle_Tarjeta_Movimientos.PRECIO_REAL, dbo.Tarjeta_Movimientos.ANULAR, dbo.Empresa.NOMBREEMPRESA, &#xD;&#xA;                      dbo.Empresa.DIRECCIONEMPRESA, dbo.Empresa.TELEFONOEMPRESA, dbo.Empresa.CIUDADEMPRESA, dbo.Empresa.RUCEMPRESA, dbo.Empresa.DGIEMPRESA, &#xD;&#xA;                      dbo.Vendedor.NOMBREVENDEDOR, UPPER(dbo.Tipos_Documentos.NOMBREABREVIATURA) AS TIPOPAGO, dbo.FnTOTALPAGADO(dbo.Tarjeta_Movimientos.IDNUM) AS TOTALPAGADO, &#xD;&#xA;                      dbo.FnCambio(dbo.Tarjeta_Movimientos.IDNUM) AS CAMBIO&#xD;&#xA;FROM         dbo.Tarjeta_Movimientos INNER JOIN&#xD;&#xA;                      dbo.Detalle_Tarjeta_Movimientos ON dbo.Tarjeta_Movimientos.IDNUM = dbo.Detalle_Tarjeta_Movimientos.IDNUM INNER JOIN&#xD;&#xA;                      dbo.Tipos_Documentos ON dbo.Tarjeta_Movimientos.TIP_DOC = dbo.Tipos_Documentos.TIP_DOC INNER JOIN&#xD;&#xA;                      dbo.Producto ON dbo.Detalle_Tarjeta_Movimientos.CODIGOPRODUCTO = dbo.Producto.CODIGOPRODUCTO INNER JOIN&#xD;&#xA;                      dbo.Empresa ON dbo.Tarjeta_Movimientos.CODIGOEMPRESA = dbo.Empresa.CODIGOEMPRESA INNER JOIN&#xD;&#xA;                      dbo.Vendedor ON dbo.Tarjeta_Movimientos.CODIGOVENDEDOR = dbo.Vendedor.CODIGOVENDEDOR &#xD;&#xA;END&#xD;&#xA;" StatementType="CREATE/ALTER PROCEDURE" RetrievedFromCache="false" />
      </Statements>
      <Statements>
        <StmtSimple StatementCompId="0" StatementId="2" StatementType="CREATE/ALTER PROCEDURE" RetrievedFromCache="false" />
      </Statements>
      <Statements>
        <StmtSimple StatementCompId="0" StatementId="3" StatementType="CREATE/ALTER PROCEDURE" RetrievedFromCache="false" />
      </Statements>
    </Batch>
  </BatchSequence>
</ShowPlanXML>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda con procedimiento almacenado

Publicado por Martin (4 intervenciones) el 26/01/2018 21:16:27
Las tablas tienen indice excepto Detalle_Tarjeta_Movimientos
le procesador es un i5 de3.2ghz de cuatro nucleo memoria de 16gb
uso Sql Server 2014 la memoria esta dinamica igual en el procesador
la tempdb esta en false
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar