SQL Server - Update obtenido de X contenido

 
Vista:
sin imagen de perfil

Update obtenido de X contenido

Publicado por OSCAR (4 intervenciones) el 28/02/2015 18:18:16
Buenas tardes,
Antes de postear e buscado por google, en este foro y en otros y no encuentro mi respuesta.

Necesito realizar un update en una tabla, y el valor viene de una palabra de otra tabla
Por ejemplo

CAMPO1-> PETICION: No me funciona el ordenador Informatica: 12343241111
CAMPO2->ID: 12343241111

Si me podeis guiar un poco.

Se que con un JOIN puedo realizar el update, lo que se me escapa es la estructura del where para que solo seleccione "Informatica: xxxx" del contenido de la columna

Muchas gracias
Saludos!
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: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Update obtenido de X contenido

Publicado por Isaias (4558 intervenciones) el 03/03/2015 20:53:11
Has una prueba con una tabla temporal y si pasa

1
2
3
4
5
6
7
8
9
10
11
12
13
drop table #pruebas
create table #pruebas (LLAVE INT PRIMARY KEY, campo1 varchar(100), campo2 varchar(50)) 
 
insert into #pruebas values (1, 'PETICION: No me funciona el ordenador Informatica: 12343241111', '')
insert into #pruebas values (2, 'PETICION: No me funciona el ordenador Informatica: 12343242222', '')
 
 
UPDATE #pruebas SET campo2 = T2.VALORX
FROM
#pruebas t1 inner join (SELECT LLAVE, SUBSTRING(CAMPO1, CHARINDEX(':', CAMPO1, 30) + 1, LEN(CAMPO1)) AS VALORX FROM #pruebas) AS T2
on t1.LLAVE = t2.LLAVE
 
select * from #pruebas
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

Update obtenido de X contenido

Publicado por OSCAR (4 intervenciones) el 03/03/2015 21:27:37
Muchas gracias, pero lo acabo de solucionar con php substring, ya que el el valor que está antes de Informatica: Pueden ser de 3 caracteres a 255 caracteres.

Muchas gracias igualmente

Saludos!
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: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Update obtenido de X contenido

Publicado por Isaias (4558 intervenciones) el 03/03/2015 23:30:12
De nada, por cortesía con los visitantes, ¿podrías publicar tu solución?
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

Update obtenido de X contenido

Publicado por OSCAR (4 intervenciones) el 05/03/2015 12:14:53
Claro, aquí dejo el código
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
<?php
set_time_limit(300);
$serverName = "XXX";
$connectionInfo = array("Database"=>"XXXX", "UID"=>"XXXX", "PWD"=>"XXXX");
$connect = sqlsrv_connect( $serverName, $connectionInfo );
if( $connect === false ) {
    die( print_r( sqlsrv_errors(), true));
}
 
 
$sql = "SELECT peticion, ID_INCIDENCIA FROM TABLA";
$stmt = sqlsrv_query( $connect, $sql );
if( $stmt === false) {
    die( print_r( sqlsrv_errors(), true) );
}
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
$peticion = $row['peticion'];
$id = $row['ID_INCIDENCIA'];
 
 
$cadena_de_texto = "$peticion";
$cadena_buscada   = "Informatica:";
$posicion_coincidencia = strpos($cadena_de_texto, $cadena_buscada);
 
 
if ($posicion_coincidencia === false) {
    echo "NO se ha encontrado la palabra deseada!!!!";
    } else {
 
            echo "Se ha encontrado la palabra buscada en la posición: ".$posicion_coincidencia;
            echo "<hr><br><br><b>";
 
			$POS = $posicion_coincidencia+13;
			$ID_INCIDENCIA = substr($cadena_de_texto, $POS, -17);
			echo "$ID_INCIDENCIA";
			echo " - $id";
            echo "</B><hr>";
 
					$sql2 = "UPDATE TABLA
			SET ID_INCIDENCIA ='$ID_INCIDENCIA'
			WHERE ID_INCIDENCIA ='$id'	";
			$stmt12 = sqlsrv_query( $connect, $sql2 );
 
            }
}
 
?>

Selecciona dentro de TABLA los campos "peticion" "ID_INCIDENCIA". Después selecciono una palabra clave en la variable $cadena_buscada, que será la palabra a buscar dentro de $cadena_texto. Una vez encontrada, guarda en que posicion de caracteres se encuentra dicha palabra, para realizar un substr hacia adelante para recoger los datos que necesito, y así realizar el update correcto.

Al principio del código determino
1
set_time_limit(300);

Ya que la consulta muestra y actualiza 9.887 registros en mi caso, así no me da error de Timeout.

Saludos!
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: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Update obtenido de X contenido

Publicado por Isaias (4558 intervenciones) el 05/03/2015 15:55:08
¿Qué motor de base de datos manejas?, ¿Has considerado el uso de los INDICES?
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

Update obtenido de X contenido

Publicado por OSCAR (4 intervenciones) el 05/03/2015 16:06:49
Sql Server.
Si si tengo indices.
El problema fue que se borro el contenido de una tabla y por eso necesitaba realizar un update masivo, ya que parte de ese contenido está en otra tabla.
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