SQL - UPDATE DE TABLA USANDO DOS BASE DE DATOS

 
Vista:
sin imagen de perfil

UPDATE DE TABLA USANDO DOS BASE DE DATOS

Publicado por Jaime (1 intervención) el 03/07/2018 18:52:55
Buenas

Soy algo novato en SQl Server, les explico lo que hago.

Tengo 2 base de datos, con una tabla cada una

Base datos 1 = MI
Tabla= tblPolizas

Base de datos 2 = Seguros
tabla = poliza

estoy intentando actualizar los datos de una columna en la tabla poliza , extrayendo información de la tabla tblPolizas, con el siguiente scrip

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
UPDATE seguros.dbo.poliza
SET saldo =
 
(
SELECT
Sum(produccion.Prima_Neta) as Suma
	FROM
		(SELECT
			IdPoliza,
			NumeroPoliza,
			--CONVERT(varchar(10), hasta, 101) AS FechaEmision,
			SUM(PrimaNeta) AS Prima_Neta
		FROM
			dbo.tblPolizas
		GROUP BY
			IdPoliza,
			NumeroPoliza
			--hasta
		UNION ALL
		SELECT
			dbo.tblAdendos.IdPoliza,
			Polizas_1.NumeroPoliza,
			--CONVERT(varchar(10), dbo.tblAdendos.hasta, 101) AS FechaEmision,
			sum(dbo.tblAdendos.PrimaNeta) AS Prima_Neta
		FROM
			dbo.tblAdendos
			LEFT JOIN dbo.tblPolizas AS polizas_1 ON dbo.tblAdendos.IdPoliza = polizas_1.IdPoliza
		GROUP BY
			dbo.tblAdendos.IdPoliza,
			NumeroPoliza
			--dbo.tblAdendos.hasta
 
		) AS produccion
group by
	produccion.IdPoliza,
	produccion.NumeroPoliza
	--produccion.FechaEmision
	--ORDER BY NumeroPoliza desc
 
)
WHERE  seguros.dbo.poliza.poliza = MI.dbo.tblPolizas.NumeroPoliza

Este me arroja el siguiente error

Mens. 4104, Nivel 16, Estado 1, Línea 43
El identificador formado por varias partes "MI.dbo.tblPolizas.NumeroPoliza" no se pudo enlazar.

Intenté ponerle un from antes del ultimo where

1
2
From MI.dbo.tblPolizas
WHERE  seguros.dbo.poliza.poliza = MI.dbo.tblPolizas.NumeroPoliza

y obtengo el siguiente error

Mens. 468, Nivel 16, Estado 9, Línea 45
No se puede resolver el conflicto de intercalación entre "SQL_Latin1_General_CP1_CI_AS" y "Modern_Spanish_CI_AS" de la operación equal to.

Modifique el where con el Collate y obtengo el siguiente error

1
2
From MI.dbo.tblPolizas
WHERE  seguros.dbo.poliza.poliza  COLLATE DATABASE_DEFAULT = MI.dbo.tblPolizas.NumeroPoliza COLLATE DATABASE_DEFAULT

Mens. 512, Nivel 16, Estado 1, Línea 3
La subconsulta ha devuelto más de un valor, lo que no es correcto cuando va a continuación de =, !=, <, <=, >, >= o cuando se utiliza como expresión.
Se terminó la instrucción.
Advertencia: valor NULL eliminado por el agregado u otra operación SET.

Necesito ayuda, si alguno me puede indicar cual es el problema, se los agradecería mucho
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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

UPDATE DE TABLA USANDO DOS BASE DE DATOS

Publicado por leonardo_josue (1173 intervenciones) el 03/07/2018 20:32:04
Hola Jaime:

el error es claro:

1
La subconsulta ha devuelto más de un valor, lo que no es correcto cuando va a continuación de =, !=, <, <=, >, >= o cuando se utiliza como

siempre que haces un SET tipo

1
... SET campo = (subconsulta) ...

debes de asegurarte que la subconsulta regrese 1 Y SOLO 1 VALOR... si regresa dos registros o más de una columna simplemente no se podrá ejecutar, en otras palabras, ejecuta la subconsulta SIN EL UPDATE y te darás cuenta de que cae en alguno de los dos casos que te comento.

Si continuas con problemas, postea algunos datos de ejemplo y dinos con esos datos qué es lo que quieres actualizar y con gusto te ayudamos a encontrar alguna otra forma para hacerlo.

Saludos
Leo.
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

UPDATE DE TABLA USANDO DOS BASE DE DATOS

Publicado por Isaias (1921 intervenciones) el 03/07/2018 23:39:47
Ademas, ambas bases de datos tienen diferente COLLATE

Mens. 468, Nivel 16, Estado 9, Línea 45
No se puede resolver el conflicto de intercalación entre "SQL_Latin1_General_CP1_CI_AS" y "Modern_Spanish_CI_AS" de la operación equal to
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