Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Trigger mas cursor

Estas en el tema de Trigger mas cursor en el foro de SQL Server en Foros del Web. Buenas tardes Tengo un problema para realizar un trigger, realmente no se como hacerlo soy algo nuevo en el tema, la idea es que tengo ...
  #1 (permalink)  
Antiguo 03/03/2015, 14:01
 
Fecha de Ingreso: noviembre-2010
Mensajes: 105
Antigüedad: 13 años, 5 meses
Puntos: 0
Exclamación Trigger mas cursor

Buenas tardes

Tengo un problema para realizar un trigger, realmente no se como hacerlo soy algo nuevo en el tema, la idea es que tengo una tabla de conceptosdepago por ejemplo

Código PHP:
idconcepto 01
descripcion 
'salario'
tipo            '+' 
tambien tengo una tabla movimientos que tiene el detalle del movimiento
Código:
movimiento
idperiodo FK
idconcepto FK
idempleado FK
valor
Aclaro que la tabla conceptopago no tiene relacion con empleado

Entonces lo que necesito hacer es realizar un trigger que cuando inserte o cree el concepto 99 se registre en la tabla movimientos el valor 300

no se ni como empezar, se me ocurre que lo que puedo hacer es recorrer la tabla empleado asi SELECT idempleado from Empleado y por cada uno de los resultados ingresar el concepto y el valor, pero no se como recorrerlo y hacer que registre lo que quiero estoy algo confundido no se como realizar los ciclos dentro de un trigger o en sqlserver

Cualquier ayuda Gracias
  #2 (permalink)  
Antiguo 03/03/2015, 15:20
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Trigger mas cursor

podrias explicarte mejor? dices que ocupas un trigger que se lance cuando se inserte un registro, hasta ahi entendible, pero para que quieres recorrer toda la tabla???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 03/03/2015, 15:25
 
Fecha de Ingreso: noviembre-2010
Mensajes: 105
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Trigger mas cursor

lo que sucede es que la tabla concepto no tiene relacion con la tabla empleado ni la tabla periodo, la unica forma donde estas tablas se encuentran es al insertar un movimiento es decir una tabla movimiento que es como una tabla detalle, si te das cuenta tiene las 3 llaves foraneas (idempleado,idperiodo,idconcepto), recorrer la tabla empleado es para que se inserte un movimiento por cada empleado, por eso pensaba en recorrer la tabla empleados y por cada uno ir realizando el movimiento y ahora que lo pienso tendria q hacer algo similar para el periodo....realmente esta del carajo eso...si me comprendes??
  #4 (permalink)  
Antiguo 03/03/2015, 15:36
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Trigger mas cursor

sigo sin entender, tienes una tabla con 3 llaves foraneas, y dices que esa tabla no tiene relacion con empleado, pero si veo que tiene una llave foranea ahi esta la relacion......y para que un movimiento por cada empleado?? donde queda el trigger????
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 03/03/2015, 22:03
 
Fecha de Ingreso: noviembre-2010
Mensajes: 105
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Trigger mas cursor

mira la tabla que no tiene relacion con empleado es la tabla de conceptos, asi como conceptos tampoco tiene relacion con la tabla periodos, la unica tabla que relaciona a estas 3 tablas es la de movimientos, la idea es que cuando inserte un concepto con codigo 99 por ejemplo, se inserte un movimiento con valor de 300, pero si lo inserto debo hacerlo con todos los empleados, no solo con uno, porque no envio ningun idempleado ni ningun id periodo....espero que ya entiendas mejor si me puedes ayudar gracias
  #6 (permalink)  
Antiguo 04/03/2015, 08:24
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Trigger mas cursor

sigo sin entender la logica que planteas, si vas a insertar un movimiento porque ese movimiento tiene que registrarse para todos los empleados?? podrias poner el diagrama de tu base de datos???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 04/03/2015, 08:47
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Trigger mas cursor

Cita:
Iniciado por daneco1720 Ver Mensaje
mira la tabla que no tiene relacion con empleado es la tabla de conceptos, asi como conceptos tampoco tiene relacion con la tabla periodos, la unica tabla que relaciona a estas 3 tablas es la de movimientos, la idea es que cuando inserte un concepto con codigo 99 por ejemplo, se inserte un movimiento con valor de 300, pero si lo inserto debo hacerlo con todos los empleados, no solo con uno, porque no envio ningun idempleado ni ningun id periodo....espero que ya entiendas mejor si me puedes ayudar gracias
Si no envías los datos necesarios para ese INSERT, ni se pueden obtener en pas a los que el TRIGGER dispone, no hay modo de hacer todo eso en este tipo de recurso.
¿No sería mejor que plantea ras todo eso en un SP?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 04/03/2015, 09:31
 
Fecha de Ingreso: noviembre-2010
Mensajes: 105
Antigüedad: 13 años, 5 meses
Puntos: 0
Exclamación Respuesta: Trigger mas cursor

mira te voy a postear el script porque la vdd no tengo blog por el cual subir la imagen y creo que el foro no deja subirlas o si? aqui te va...espero que asi me entiendas...te repito que la idea es que cuando cree el concepto 99 por ejemplo se realice un movimiento de valor 300. Quizas el q se equivoca sea yo

Código SQL:
Ver original
  1. USE [PAGOS]
  2. GO
  3. /****** Object:  Table [dbo].[Concepto]    Script Date: 03/03/2015 00:47:11 ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8. SET ANSI_PADDING ON
  9. GO
  10. CREATE TABLE [dbo].[Concepto](
  11.     [Codigo] [INT] NOT NULL,
  12.     [Descrip] [VARCHAR](MAX) NOT NULL,
  13.     [Tipo] [CHAR](1) NULL,
  14. PRIMARY KEY CLUSTERED
  15. (
  16.     [Codigo] ASC
  17. )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
  18. ) ON [PRIMARY]
  19. GO
  20. SET ANSI_PADDING OFF
  21. GO
  22. /****** Object:  Table [dbo].[Cargo]    Script Date: 03/03/2015 00:47:11 ******/
  23. SET ANSI_NULLS ON
  24. GO
  25. SET QUOTED_IDENTIFIER ON
  26. GO
  27. SET ANSI_PADDING ON
  28. GO
  29. CREATE TABLE [dbo].[Cargo](
  30.     [Codigo] [INT] NOT NULL,
  31.     [Descripcion] [VARCHAR](MAX) NOT NULL,
  32.     [Salario] [REAL] NOT NULL,
  33.  CONSTRAINT [PK__Cargo__06370DAD0425A276] PRIMARY KEY CLUSTERED
  34. (
  35.     [Codigo] ASC
  36. )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
  37. ) ON [PRIMARY]
  38. GO
  39. SET ANSI_PADDING OFF
  40. GO
  41. /****** Object:  Table [dbo].[Periodo]    Script Date: 03/03/2015 00:47:11 ******/
  42. SET ANSI_NULLS ON
  43. GO
  44. SET QUOTED_IDENTIFIER ON
  45. GO
  46. SET ANSI_PADDING ON
  47. GO
  48. CREATE TABLE [dbo].[Periodo](
  49.     [Codigo] [INT] NOT NULL,
  50.     [Ano] [CHAR](4) NULL,
  51.     [Fechaini] [smalldatetime] NOT NULL,
  52.     [Fechafin] [smalldatetime] NOT NULL,
  53. PRIMARY KEY CLUSTERED
  54. (
  55.     [Codigo] ASC
  56. )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
  57. ) ON [PRIMARY]
  58. GO
  59. SET ANSI_PADDING OFF
  60. GO
  61. /****** Object:  StoredProcedure [dbo].[listadeperiodos]    Script Date: 03/03/2015 00:47:12 ******/
  62. SET ANSI_NULLS ON
  63. GO
  64. SET QUOTED_IDENTIFIER ON
  65. GO

Última edición por gnzsoloyo; 04/03/2015 a las 10:09
  #9 (permalink)  
Antiguo 04/03/2015, 09:34
 
Fecha de Ingreso: noviembre-2010
Mensajes: 105
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Trigger mas cursor

si gnzsoloyo, por mi lo haria asi...y seria lo mejor pero el requisito es con un trigger, asi que ni modos, la vdd ahi esta el codigo posteado, miralo y me dices si quizas me equivoco y se puede hacer esto, yo la vdd no le veo forma ...por eso pido ayuda
  #10 (permalink)  
Antiguo 04/03/2015, 09:38
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Trigger mas cursor

3 tablas, con sus respectivas PK, pero no veo la relaciones, ahora cuando el concepto sea 300 se va a insertar un movimiento, pero porque ese movimiento debera de afectar a todos los empleados? que indica el concepto 300???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #11 (permalink)  
Antiguo 04/03/2015, 09:58
 
Fecha de Ingreso: noviembre-2010
Mensajes: 105
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Trigger mas cursor

no, mira ps las relaciones se ven en el script, digamos que tenemos el concepto salario, y ese concepto tiene un codigo y un tipo(así esta realizada la tabla conceptos: codigo,descrip,tipo), la idea es que cuando se inserte el codigo 99 se realice un movimiento la tabla movimiento esta asi(idempleado,idperiodo,idconcepto,valor) y que ese movimiento tenga un valor de 300, el lio es como hago para relacionar el concepto insertado, con el empleado y el periodo si no tienen relacion alguna o quizas esto se deba a que deberia existir una relacion entre la tabla empleado y concepto.
  #12 (permalink)  
Antiguo 04/03/2015, 10:08
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Trigger mas cursor

en lo que pegaste del script no se ven las relaciones(yo esperaria ver en script algo como esto:

Código SQL:
Ver original
  1. USE AdventureWorks2012;
  2. GO
  3. CREATE TABLE Sales.TempSalesReason (TempID INT NOT NULL, Name nvarchar(50),
  4. CONSTRAINT PK_TempSales PRIMARY KEY NONCLUSTERED (TempID),
  5. CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID)
  6.     REFERENCES Sales.SalesReason (SalesReasonID)
  7.     ON DELETE CASCADE
  8.     ON UPDATE CASCADE
  9. );GO

y tu script no tiene ningun FK constraint, ahora el lio es relacionarlas??? las quieres relacionar pero no tienes ningun campo para hacerlo, entonces revisa tu diagrama entidad relacion y ve donde puedes meter las relaciones para poder decir que el cambio que buscas aplica solo a un cliente no a toooodos, eso que quieres hacer es como decir, llega alguien al banco y deposita 1000, pero como mi sistema no sabe quien deposito le voy a agregar 1000 a todos mis clientes, como que no suena logico verdad???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #13 (permalink)  
Antiguo 04/03/2015, 10:12
 
Fecha de Ingreso: noviembre-2010
Mensajes: 105
Antigüedad: 13 años, 5 meses
Puntos: 0
Exclamación Respuesta: Trigger mas cursor

Perdon olvide pegar en el script esto:

Código:
ALTER TABLE [dbo].[Empleado]  WITH CHECK ADD  CONSTRAINT [FK_Empleado_Cargo] FOREIGN KEY([Cargo])
REFERENCES [dbo].[Cargo] ([Codigo])
GO
ALTER TABLE [dbo].[Empleado] CHECK CONSTRAINT [FK_Empleado_Cargo]
GO
/****** Object:  ForeignKey [FK_Liquidacion_IdEmpleado]    Script Date: 03/03/2015 00:47:11 ******/
ALTER TABLE [dbo].[Liquidacion]  WITH CHECK ADD  CONSTRAINT [FK_Liquidacion_IdEmpleado] FOREIGN KEY([IdEmpleado])
REFERENCES [dbo].[Empleado] ([Id])
GO
ALTER TABLE [dbo].[Liquidacion] CHECK CONSTRAINT [FK_Liquidacion_IdEmpleado]
GO
/****** Object:  ForeignKey [FK_Liquidacion_Periodo]    Script Date: 03/03/2015 00:47:11 ******/
ALTER TABLE [dbo].[Liquidacion]  WITH CHECK ADD  CONSTRAINT [FK_Liquidacion_Periodo] FOREIGN KEY([Periodo])
REFERENCES [dbo].[Periodo] ([Codigo])
GO
ALTER TABLE [dbo].[Liquidacion] CHECK CONSTRAINT [FK_Liquidacion_Periodo]
GO
/****** Object:  ForeignKey [FK_Movimientos_idConcepto]    Script Date: 03/03/2015 00:47:11 ******/
ALTER TABLE [dbo].[MovimientoNomina]  WITH CHECK ADD  CONSTRAINT [FK_Movimientos_idConcepto] FOREIGN KEY([idConcepto])
REFERENCES [dbo].[Concepto] ([Codigo])
GO
ALTER TABLE [dbo].[MovimientoNomina] CHECK CONSTRAINT [FK_Movimientos_idConcepto]
GO
/****** Object:  ForeignKey [FK_Movimientos_IdEmpleado]    Script Date: 03/03/2015 00:47:11 ******/
ALTER TABLE [dbo].[MovimientoNomina]  WITH CHECK ADD  CONSTRAINT [FK_Movimientos_IdEmpleado] FOREIGN KEY([IdEmpleado])
REFERENCES [dbo].[Empleado] ([Id])
GO
ALTER TABLE [dbo].[MovimientoNomina] CHECK CONSTRAINT [FK_Movimientos_IdEmpleado]
GO
/****** Object:  ForeignKey [FK_Movimientos_idPeriodo]    Script Date: 03/03/2015 00:47:11 ******/
ALTER TABLE [dbo].[MovimientoNomina]  WITH CHECK ADD  CONSTRAINT [FK_Movimientos_idPeriodo] FOREIGN KEY([idPeriodo])
REFERENCES [dbo].[Periodo] ([Codigo])
GO
ALTER TABLE [dbo].[MovimientoNomina] CHECK CONSTRAINT [FK_Movimientos_idPeriodo]
GO
  #14 (permalink)  
Antiguo 04/03/2015, 10:16
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Trigger mas cursor

faltan partes del script........la tabla empleado, la tabla nomina......
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #15 (permalink)  
Antiguo 04/03/2015, 10:20
 
Fecha de Ingreso: noviembre-2010
Mensajes: 105
Antigüedad: 13 años, 5 meses
Puntos: 0
Exclamación Respuesta: Trigger mas cursor

este esta completo lo quise subir por partes...xq es muy extenso
Código SQL:
Ver original
  1. USE [PAGOS]
  2. GO
  3. /****** Object:  Table [dbo].[Concepto]    Script Date: 03/03/2015 00:47:11 ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8. SET ANSI_PADDING ON
  9. GO
  10. CREATE TABLE [dbo].[Concepto](
  11.     [Codigo] [INT] NOT NULL,
  12.     [Descrip] [VARCHAR](MAX) NOT NULL,
  13.     [Tipo] [CHAR](1) NULL,
  14. PRIMARY KEY CLUSTERED
  15. (
  16.     [Codigo] ASC
  17. )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
  18. ) ON [PRIMARY]
  19. GO
  20. SET ANSI_PADDING OFF
  21. GO
  22. /****** Object:  Table [dbo].[Cargo]    Script Date: 03/03/2015 00:47:11 ******/
  23. SET ANSI_NULLS ON
  24. GO
  25. SET QUOTED_IDENTIFIER ON
  26. GO
  27. SET ANSI_PADDING ON
  28. GO
  29. CREATE TABLE [dbo].[Cargo](
  30.     [Codigo] [INT] NOT NULL,
  31.     [Descripcion] [VARCHAR](MAX) NOT NULL,
  32.     [Salario] [REAL] NOT NULL,
  33.  CONSTRAINT [PK__Cargo__06370DAD0425A276] PRIMARY KEY CLUSTERED
  34. (
  35.     [Codigo] ASC
  36. )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
  37. ) ON [PRIMARY]
  38. GO
  39. SET ANSI_PADDING OFF
  40. GO
  41. /****** Object:  Table [dbo].[Periodo]    Script Date: 03/03/2015 00:47:11 ******/
  42. SET ANSI_NULLS ON
  43. GO
  44. SET QUOTED_IDENTIFIER ON
  45. GO
  46. SET ANSI_PADDING ON
  47. GO
  48. CREATE TABLE [dbo].[Periodo](
  49.     [Codigo] [INT] NOT NULL,
  50.     [Ano] [CHAR](4) NULL,
  51.     [Fechaini] [smalldatetime] NOT NULL,
  52.     [Fechafin] [smalldatetime] NOT NULL,
  53. PRIMARY KEY CLUSTERED
  54. (
  55.     [Codigo] ASC
  56. )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
  57. ) ON [PRIMARY]
  58. GO
  59. SET ANSI_PADDING OFF
  60. GO
  61. /****** Object:  StoredProcedure [dbo].[listadeperiodos]    Script Date: 03/03/2015 00:47:12 ******/
  62. SET ANSI_NULLS ON
  63. GO
  64. SET QUOTED_IDENTIFIER ON
  65. GO
  66. -- =============================================
  67. -- Author:      <Author,,Name>
  68. -- Create date: <Create Date,,>
  69. -- Description: <Description,,>
  70. -- =============================================
  71. CREATE PROCEDURE [dbo].[listadeperiodos]
  72.     -- Add the parameters for the stored procedure here
  73. AS
  74. BEGIN
  75.     -- SET NOCOUNT ON added to prevent extra result sets from
  76.     -- interfering with SELECT statements.
  77.     SET NOCOUNT ON;
  78.  
  79.     -- Insert statements for procedure here
  80.     SELECT Codigo FROM Periodo
  81. END
  82. GO
  83. /****** Object:  StoredProcedure [dbo].[listadeconceptos]    Script Date: 03/03/2015 00:47:12 ******/
  84. SET ANSI_NULLS ON
  85. GO
  86. SET QUOTED_IDENTIFIER ON
  87. GO
  88. -- =============================================
  89. -- Author:      <Author,,Name>
  90. -- Create date: <Create Date,,>
  91. -- Description: <Description,,>
  92. -- =============================================
  93. CREATE PROCEDURE [dbo].[listadeconceptos]
  94.     -- Add the parameters for the stored procedure here
  95.    
  96. AS
  97. BEGIN
  98.     -- SET NOCOUNT ON added to prevent extra result sets from
  99.     -- interfering with SELECT statements.
  100.     SET NOCOUNT ON;
  101.  
  102.     -- Insert statements for procedure here
  103.     SELECT Codigo , Descrip FROM Concepto
  104. END
  105. GO
  106. /****** Object:  StoredProcedure [dbo].[listadecargos]    Script Date: 03/03/2015 00:47:12 ******/
  107. SET ANSI_NULLS ON
  108. GO
  109. SET QUOTED_IDENTIFIER ON
  110. GO
  111. -- =============================================
  112. -- Author:      <Author,,Name>
  113. -- Create date: <Create Date,,>
  114. -- Description: <Description,,>
  115. -- =============================================
  116. CREATE PROCEDURE [dbo].[listadecargos]
  117.     -- Add the parameters for the stored procedure here
  118.    
  119. AS
  120. BEGIN
  121.     -- SET NOCOUNT ON added to prevent extra result sets from
  122.     -- interfering with SELECT statements.
  123.     SET NOCOUNT ON;
  124.  
  125.     -- Insert statements for procedure here
  126.     SELECT Codigo,Descripcion FROM Cargo
  127. END
  128. GO
  129. /****** Object:  Table [dbo].[Empleado]    Script Date: 03/03/2015 00:47:11 ******/
  130. SET ANSI_NULLS ON
  131. GO
  132. SET QUOTED_IDENTIFIER ON
  133. GO
  134. SET ANSI_PADDING ON
  135. GO
  136. CREATE TABLE [dbo].[Empleado](
  137.     [Id] [INT] NOT NULL,
  138.     [Nombres] [VARCHAR](MAX) NOT NULL,
  139.     [Apellidos] [VARCHAR](MAX) NOT NULL,
  140.     [Sexo] [CHAR](1) NULL,
  141.     [Cargo] [INT] NOT NULL,
  142. PRIMARY KEY CLUSTERED
  143. (
  144.     [Id] ASC
  145. )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
  146. ) ON [PRIMARY]
  147. GO
  148. SET ANSI_PADDING OFF
  149. GO
  150. /****** Object:  StoredProcedure [dbo].[buscarinicial]    Script Date: 03/03/2015 00:47:12 ******/
  151. SET ANSI_NULLS ON
  152. GO
  153. SET QUOTED_IDENTIFIER ON
  154. GO
  155. -- =============================================
  156. -- Author:      <Author,,Name>
  157. -- Create date: <Create Date,,>
  158. -- Description: <Description,,>
  159. -- =============================================
  160. CREATE PROCEDURE [dbo].[buscarinicial]
  161.     -- Add the parameters for the stored procedure here
  162.     @inicial VARCHAR(10),@sexo VARCHAR(10)
  163. AS
  164. BEGIN
  165.     -- SET NOCOUNT ON added to prevent extra result sets from
  166.     -- interfering with SELECT statements.
  167.     SET NOCOUNT ON;
  168.  
  169.     -- Insert statements for procedure here
  170.     SELECT Id,nombres,apellidos FROM Empleado WHERE Nombres LIKE @inicial+'%' AND sexo LIKE @sexo
  171. END
  172. GO
  173. /****** Object:  Table [dbo].[MovimientoNomina]    Script Date: 03/03/2015 00:47:11 ******/
  174. SET ANSI_NULLS ON
  175. GO
  176. SET QUOTED_IDENTIFIER ON
  177. GO
  178. CREATE TABLE [dbo].[MovimientoNomina](
  179.     [idPeriodo] [INT] NOT NULL,
  180.     [IdEmpleado] [INT] NOT NULL,
  181.     [idConcepto] [INT] NOT NULL,
  182.     [Valor] [REAL] NULL
  183. ) ON [PRIMARY]
  184. GO
  185. /****** Object:  Table [dbo].[Liquidacion]    Script Date: 03/03/2015 00:47:11 ******/
  186. SET ANSI_NULLS ON
  187. GO
  188. SET QUOTED_IDENTIFIER ON
  189. GO
  190. CREATE TABLE [dbo].[Liquidacion](
  191.     [Periodo] [INT] NOT NULL,
  192.     [IdEmpleado] [INT] NOT NULL,
  193.     [Neto] [REAL] NULL
  194. ) ON [PRIMARY]
  195. GO
  196. /****** Object:  StoredProcedure [dbo].[ingresarmovimiento]    Script Date: 03/03/2015 00:47:12 ******/
  197. SET ANSI_NULLS ON
  198. GO
  199. SET QUOTED_IDENTIFIER ON
  200. GO
  201. -- =============================================
  202. -- Author:      <Author,,Name>
  203. -- Create date: <Create Date,,>
  204. -- Description: <Description,,>
  205. -- =============================================
  206. CREATE PROCEDURE [dbo].[ingresarmovimiento]
  207.     -- Add the parameters for the stored procedure here
  208.     @periodo INT,
  209.     @empleado INT,
  210.     @concepto INT,
  211.     @valor REAL
  212. AS
  213. BEGIN
  214.     -- SET NOCOUNT ON added to prevent extra result sets from
  215.     -- interfering with SELECT statements.
  216.     SET NOCOUNT ON;
  217.  
  218.     -- Insert statements for procedure here
  219.     INSERT INTO MovimientoNomina VALUES(@periodo,@empleado,@concepto,@valor)
  220.    
  221. END
  222. GO
  223. /****** Object:  StoredProcedure [dbo].[liquidar]    Script Date: 03/03/2015 00:47:12 ******/
  224. SET ANSI_NULLS ON
  225. GO
  226. SET QUOTED_IDENTIFIER ON
  227. GO
  228. -- =============================================
  229. -- Author:      <Author,,Name>
  230. -- Create date: <Create Date,,>
  231. -- Description: <Description,,>
  232. -- =============================================
  233. CREATE PROCEDURE [dbo].[liquidar]
  234.     -- Add the parameters for the stored procedure here
  235.     @periodo INT,
  236.     @empleado INT,
  237.     @neto REAL
  238. AS
  239. BEGIN
  240.     -- SET NOCOUNT ON added to prevent extra result sets from
  241.     -- interfering with SELECT statements.
  242.     SET NOCOUNT ON;
  243.  
  244.     -- Insert statements for procedure here
  245.     INSERT INTO Liquidacion VALUES(@periodo,@empleado,@neto)
  246. END
  247. GO
  248. /****** Object:  ForeignKey [FK_Empleado_Cargo]    Script Date: 03/03/2015 00:47:11 ******/
  249. ALTER TABLE [dbo].[Empleado]  WITH CHECK ADD  CONSTRAINT [FK_Empleado_Cargo] FOREIGN KEY([Cargo])
  250. REFERENCES [dbo].[Cargo] ([Codigo])
  251. GO
  252. ALTER TABLE [dbo].[Empleado] CHECK CONSTRAINT [FK_Empleado_Cargo]
  253. GO
  254. /****** Object:  ForeignKey [FK_Liquidacion_IdEmpleado]    Script Date: 03/03/2015 00:47:11 ******/
  255. ALTER TABLE [dbo].[Liquidacion]  WITH CHECK ADD  CONSTRAINT [FK_Liquidacion_IdEmpleado] FOREIGN KEY([IdEmpleado])
  256. REFERENCES [dbo].[Empleado] ([Id])
  257. GO
  258. ALTER TABLE [dbo].[Liquidacion] CHECK CONSTRAINT [FK_Liquidacion_IdEmpleado]
  259. GO
  260. /****** Object:  ForeignKey [FK_Liquidacion_Periodo]    Script Date: 03/03/2015 00:47:11 ******/
  261. ALTER TABLE [dbo].[Liquidacion]  WITH CHECK ADD  CONSTRAINT [FK_Liquidacion_Periodo] FOREIGN KEY([Periodo])
  262. REFERENCES [dbo].[Periodo] ([Codigo])
  263. GO
  264. ALTER TABLE [dbo].[Liquidacion] CHECK CONSTRAINT [FK_Liquidacion_Periodo]
  265. GO
  266. /****** Object:  ForeignKey [FK_Movimientos_idConcepto]    Script Date: 03/03/2015 00:47:11 ******/
  267. ALTER TABLE [dbo].[MovimientoNomina]  WITH CHECK ADD  CONSTRAINT [FK_Movimientos_idConcepto] FOREIGN KEY([idConcepto])
  268. REFERENCES [dbo].[Concepto] ([Codigo])
  269. GO
  270. ALTER TABLE [dbo].[MovimientoNomina] CHECK CONSTRAINT [FK_Movimientos_idConcepto]
  271. GO
  272. /****** Object:  ForeignKey [FK_Movimientos_IdEmpleado]    Script Date: 03/03/2015 00:47:11 ******/
  273. ALTER TABLE [dbo].[MovimientoNomina]  WITH CHECK ADD  CONSTRAINT [FK_Movimientos_IdEmpleado] FOREIGN KEY([IdEmpleado])
  274. REFERENCES [dbo].[Empleado] ([Id])
  275. GO
  276. ALTER TABLE [dbo].[MovimientoNomina] CHECK CONSTRAINT [FK_Movimientos_IdEmpleado]
  277. GO
  278. /****** Object:  ForeignKey [FK_Movimientos_idPeriodo]    Script Date: 03/03/2015 00:47:11 ******/
  279. ALTER TABLE [dbo].[MovimientoNomina]  WITH CHECK ADD  CONSTRAINT [FK_Movimientos_idPeriodo] FOREIGN KEY([idPeriodo])
  280. REFERENCES [dbo].[Periodo] ([Codigo])
  281. GO
  282. ALTER TABLE [dbo].[MovimientoNomina] CHECK CONSTRAINT [FK_Movimientos_idPeriodo]
  283. GO

Última edición por gnzsoloyo; 04/03/2015 a las 10:34
  #16 (permalink)  
Antiguo 04/03/2015, 11:13
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Trigger mas cursor

viendo tu driagrama.....sigo sin entender...pero tratare :P.....

tienes una tabla de conceptos, que funciona como catalogo, porque si agregas un concepto se tiene que agregar un movimiento?? asi como lo estas manejando la tabla de conceptos es independiente de los movimientos, y solo insertaras en la de movimientos cuando se haga un movimiento relacionado con el empleado, digamos agregamos un concepto de descuento por pago de casa, ese concepto no aplicara para todos los empleados solo para los que tengan ciertas condiciones, pero como saber eso con el diagrama que presentas??? aqui podriamos agregar una tabla que sea empleado_concepto, para saber que conceptos se ligan a cada empleado y quitar la columna de id_concepto de movimientos quedando algo como esto;

empleado
id
nombres
apellidos
sexo
cargo

empleado_concepto
id_empleado
id_concepto

concepto
codigo
descrip
codigo


y tu tabla de movientos quedaria como:

id_periodo
id_empleado
valor
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: cursor, select, server, sql, tabla, trigger
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:36.