SQL Server - Cómo evitar que se dupliquen los registros

   
Vista:

Cómo evitar que se dupliquen los registros

Publicado por mario (12 intervenciones) el 01/11/2016 17:09:36
Tengo 3 tablas una de presupuestos, otra de cuentas y otra de presupuestosCuentas, realizo un store procedure que me permite crear el presupuesto, a la vez me agrega el codigo del presupuesto a la tabla presupuestoCuentas junto con todos los codigos de la cuentas, mi problema es que me duplica con las cuentas de los presupuestos anteriores, el código que uso es éste

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
ALTER PROCEDURE [dbo].[agregarPresupuesto]
@codEstado as int,
@fechaInicio AS date,
@fechaFin as date,
@monto as money,
@msg AS VARCHAR(100) OUTPUT
 
AS
 
	INSERT INTO Presupuestos(idEstadoPresupuesto, fechaInicio, fechaFin, monto) VALUES (@codEstado, @fechaInicio, @fechaFin, @monto)
 
	declare @presupuesto as int
	set @presupuesto = (select MAX(idpresupuesto) from Presupuestos)
 
	while not EXISTS(select idPresupuestos from PresupuestosCuentas where idPresupuestos = @presupuesto)
	begin
		INSERT INTO dbo.PresupuestosCuentas( codCuentas, idPresupuestos, monto )
		SELECT     dbo.Cuentas.codcuentas, @presupuesto, 0
		FROM         dbo.Cuentas CROSS JOIN dbo.Presupuestos
 
	end
 
return @msg


Esto es lo que me manda como resultado:

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
1	1	1	0,0000
2	1	1	0,0000
3	1	1	0,0000
4	1	1	0,0000
5	1	1	0,0000
6	1	1	0,0000
7	1	1	0,0000
8	1	1	0,0000
9	1	1	0,0000
10	1	1	0,0000
11	1	1	0,0000
12	1	1	0,0000
13	2	1	0,0000
14	2	1	0,0000
15	2	1	0,0000
16	2	1	0,0000
17	2	1	0,0000
18	2	1	0,0000
19	2	1	0,0000
20	2	1	0,0000
21	2	1	0,0000
22	2	1	0,0000
23	2	1	0,0000
24	2	1	0,0000
25	3	1	0,0000
26	3	1	0,0000
27	3	1	0,0000
28	3	1	0,0000
29	3	1	0,0000
30	3	1	0,0000
31	3	1	0,0000
32	3	1	0,0000
33	3	1	0,0000
34	3	1	0,0000
35	3	1	0,0000
36	3	1	0,0000
37	5	1	0,0000
38	5	1	0,0000
39	5	1	0,0000
40	5	1	0,0000
41	5	1	0,0000
42	5	1	0,0000
43	5	1	0,0000
44	5	1	0,0000
45	5	1	0,0000
46	5	1	0,0000
47	5	1	0,0000
48	5	1	0,0000
49	6	1	0,0000
50	6	1	0,0000
51	6	1	0,0000
52	6	1	0,0000
53	6	1	0,0000
54	6	1	0,0000
55	6	1	0,0000
56	6	1	0,0000
57	6	1	0,0000
58	6	1	0,0000
59	6	1	0,0000
60	6	1	0,0000
61	7	1	0,0000
62	7	1	0,0000
63	7	1	0,0000
64	7	1	0,0000
65	7	1	0,0000
66	7	1	0,0000
67	7	1	0,0000
68	7	1	0,0000
69	7	1	0,0000
70	7	1	0,0000
71	7	1	0,0000
72	7	1	0,0000
73	9	1	0,0000
74	9	1	0,0000
75	9	1	0,0000
76	9	1	0,0000
77	9	1	0,0000
78	9	1	0,0000
79	9	1	0,0000
80	9	1	0,0000
81	9	1	0,0000
82	9	1	0,0000
83	9	1	0,0000
84	9	1	0,0000
85	11	1	0,0000
86	11	1	0,0000
87	11	1	0,0000
88	11	1	0,0000
89	11	1	0,0000
90	11	1	0,0000
91	11	1	0,0000
92	11	1	0,0000
93	11	1	0,0000
94	11	1	0,0000
95	11	1	0,0000
96	11	1	0,0000
97	12	1	0,0000
98	12	1	0,0000
99	12	1	0,0000
100	12	1	0,0000
101	12	1	0,0000
102	12	1	0,0000
103	12	1	0,0000
104	12	1	0,0000
105	12	1	0,0000
106	12	1	0,0000
107	12	1	0,0000
108	12	1	0,0000
109	13	1	0,0000
110	13	1	0,0000
111	13	1	0,0000
112	13	1	0,0000
113	13	1	0,0000
114	13	1	0,0000
115	13	1	0,0000
116	13	1	0,0000
117	13	1	0,0000
118	13	1	0,0000
119	13	1	0,0000
120	13	1	0,0000
121	14	1	0,0000
122	14	1	0,0000
123	14	1	0,0000
124	14	1	0,0000
125	14	1	0,0000
126	14	1	0,0000
127	14	1	0,0000
128	14	1	0,0000
129	14	1	0,0000
130	14	1	0,0000
131	14	1	0,0000
132	14	1	0,0000
133	15	1	0,0000
134	15	1	0,0000
135	15	1	0,0000
136	15	1	0,0000
137	15	1	0,0000
138	15	1	0,0000
139	15	1	0,0000
140	15	1	0,0000
141	15	1	0,0000
142	15	1	0,0000
143	15	1	0,0000
144	15	1	0,0000
145	16	1	0,0000
146	16	1	0,0000
147	16	1	0,0000
148	16	1	0,0000
149	16	1	0,0000
150	16	1	0,0000
151	16	1	0,0000
152	16	1	0,0000
153	16	1	0,0000
154	16	1	0,0000
155	16	1	0,0000
156	16	1	0,0000
157	17	1	0,0000
158	17	1	0,0000
159	17	1	0,0000
160	17	1	0,0000
161	17	1	0,0000
162	17	1	0,0000
163	17	1	0,0000
164	17	1	0,0000
165	17	1	0,0000
166	17	1	0,0000
167	17	1	0,0000
168	17	1	0,0000
169	18	1	0,0000
170	18	1	0,0000
171	18	1	0,0000
172	18	1	0,0000
173	18	1	0,0000
174	18	1	0,0000
175	18	1	0,0000
176	18	1	0,0000
177	18	1	0,0000
178	18	1	0,0000
179	18	1	0,0000
180	18	1	0,0000
181	19	1	0,0000
182	19	1	0,0000
183	19	1	0,0000
184	19	1	0,0000
185	19	1	0,0000
186	19	1	0,0000
187	19	1	0,0000
188	19	1	0,0000
189	19	1	0,0000
190	19	1	0,0000
191	19	1	0,0000
192	19	1	0,0000
193	20	1	0,0000
194	20	1	0,0000
195	20	1	0,0000
196	20	1	0,0000
197	20	1	0,0000
198 20	1	0,0000
199	20	1	0,0000
200	20	1	0,0000
 
pero debería ser:
 
1	1	1	0,0000
13	2	1	0,0000
25	3	1	0,0000
37	5	1	0,0000
49	6	1	0,0000
61	7	1	0,0000
73	9	1	0,0000
85	11	1	0,0000
97	12	1	0,0000
109	13	1	0,0000
121	14	1	0,0000
133	15	1	0,0000
145	16	1	0,0000
157	17	1	0,0000
169	18	1	0,0000
181	19	1	0,0000
193	20	1	0,0000
NULL	NULL	NULL	NULL
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

Cómo evitar que se dupliquen los registros

Publicado por Isaias (3424 intervenciones) el 01/11/2016 20:23:11
Y si antes de INSERTAR ejecutas solo el query, ¿que resultado te da?

1
2
SELECT  dbo.Cuentas.codcuentas, @presupuesto, 0
FROM dbo.Cuentas CROSS JOIN dbo.Presupuestos
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

Cómo evitar que se dupliquen los registros

Publicado por mario (12 intervenciones) el 01/11/2016 22:34:58
si lo corro de forma individual me corre bien
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

Cómo evitar que se dupliquen los registros

Publicado por Isaias (3424 intervenciones) el 01/11/2016 23:14:34
¿No tienes registros DUPLICADOS en el resultado de tu SELECT?
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

Cómo evitar que se dupliquen los registros

Publicado por mario (12 intervenciones) el 01/11/2016 23:53:08
Cuando lo corro de forma individual el código no me muestra ningún resultado y en las tablas tampoco tengo duplicados
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

Cómo evitar que se dupliquen los registros

Publicado por Isaias (3424 intervenciones) el 03/11/2016 19:40:07
Entonces ya no me quedo claro, si tu SELEC no te da resultado, ¿cuando es que se duplica?
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