SQL Server - conectar a tabla sql server de nombre con caracteres especiales

 
Vista:

conectar a tabla sql server de nombre con caracteres especiales

Publicado por Sam (7 intervenciones) el 07/06/2018 11:40:39
Hola buenas amigas/os, a ver si me pueden ayudar con esto:

Para conectarme a una tabla de una base de datos sql server;

Tengo la siguiente sentencia que dice:

1
$sql = "SELECT * FROM dbo.empresa$Tarifas Proveedores";


Y el navegador me dice el siguiente error:

Notice: Undefined variable: Tarifas

Intuyo que mi script no es capaz de interpretar como parte del nombre de la tabla el
simbolo del "$" y quizas tambien tampoco interprete bien el espacio y el "." .
Pero necesito que mi script lo interprete bien por que forman parte del
nombre de la tabla.

Gracias de antemanoa tod@s.
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 xve
Val: 63
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

conectar a tabla sql server de nombre con caracteres especiales

Publicado por xve (102 intervenciones) el 07/06/2018 12:33:27
Hola Sam, para solucionarlo, pon tu consulta entre comillas simples... algo así:

1
$sql = 'SELECT * FROM dbo.empresa$Tarifas Proveedores';

Con las comillas simple no intenta interpretar el contenido interior.
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

conectar a tabla sql server de nombre con caracteres especiales

Publicado por Sam (7 intervenciones) el 07/06/2018 12:40:36
Hola xve, que tal mira,

acabo de poner comillas simples como me has indicado y me dice:

Notice: Undefined variable: Tarifas

Array ( [0] => Array ( [0] => 42000 [SQLSTATE] => 42000 [1] => 102 [code] => 102 [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Sintaxis incorrecta cerca de 'dbo.empresa Proveedores'. [message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Sintaxis incorrecta cerca de 'dbo.empresa Proveedores'. ) )
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

conectar a tabla sql server de nombre con caracteres especiales

Publicado por Isaias (4558 intervenciones) el 07/06/2018 16:24:02
Primero, si es SQL Server

SELECT * FROM dbo.empresa$Tarifas Proveedores

Esta instruccion esta erronea, ¿que significa el signo de $, despues pones un espacio y Proveedores????
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

conectar a tabla sql server de nombre con caracteres especiales

Publicado por Sam (7 intervenciones) el 07/06/2018 16:28:35
Todo el nombre de la tabla es este:
dbo.empresa$Tarifas Proveedores

Y que os parece la siguiente posible solucion al problema:

Desde la base de datos sql server programarle un trigger que le diga a la base
de datos que exporte la tabla en cuestion en formato .sql y renombrandola con otro
nombre digamos mas normal sin caracteres especiales.

Y ya de paso que la exportación se efectuara a una hora en concreto cada dia.

Esto se prodria hacer?

Supongo que tendria que hacerlo el administrador de la base de datos (que no soy yo dicho sea de paso).

Que opinais de esto ?
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

conectar a tabla sql server de nombre con caracteres especiales

Publicado por Sam (7 intervenciones) el 07/06/2018 17:12:12
Es mas os comento mi problema en lineas generales:

Me han encargado lo siguiente:
Conectarme a un base de datos sql server, el administrador de dicha base de datos me ha dado acceso de lectura a la tabla llamada:
"dbo.empresa$Tarifas Proveedores"

Descargarme esta tabla osea exportarla a un directorio mediante un script en php (no puede exportarse desde un gestor de bases de datos,
ya que esta exportacion se hará cada dia a una hora), seguidamente cogerla de un directorio e
importarla a una segunda base de datos pero esta vez mysql la segunda bbdd.

¿Por que dos bases de datos?, por que la primera la administra otra persona (esta otra persona no puede ser la que exporte la tabla).
Y la segunda la trato yo.
Asi importada la tabla en la segunda bbdd, yo puedo operar sobre dicha tabla
haciendo mas acciones sobre ella.

Esto es lo que se me ha ordenado hacer.

Y todo me funciona siempre y cuando la base de datos primera fuera mysql y no sql server.
Pero no, es sql server y con el agravante de que en el nombre de la tabla lleva cararcteres como $, espacios etc.


Alguna idea la agradeceria mucho por que estoy ya sin ideas la verdad.
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

conectar a tabla sql server de nombre con caracteres especiales

Publicado por Isaias (4558 intervenciones) el 07/06/2018 22:57:04
Mucho mas facil

El que ADMINISTRA SQL Server, que le EXPORTE la tabla a una carpeta (a la cual, usted tenga acceso) en formato TEXTO PLANO y con separador de PIPE (|).

Una vez teniendo el archivo TEXTO, usted pued hacer lo que guste.

En SQL Server cuando un OBJETO (tabla, vista, etc.) tiene espacios o caracteres especiales en el nombre, este, debe encerrarse entre corchetes.

[dbo].[empresa$Tarifas Proveedores]
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

conectar a tabla sql server de nombre con caracteres especiales

Publicado por Sam (7 intervenciones) el 08/06/2018 09:31:36
Isaias muchas gracias por tus consejos.
Una cosa muy, muy importante:

Me aconsejas que el que administra sql server exporte la tabla a una carpeta. Bien, este proceso de exportación
puede hacerse cada dia a una hora en concreto de forma automatizada.?? Sin que sea el administrador que lo haga de forma manual.

Es decir se puede configurar / programar la base de datos o el gestor de la base de datos sql server para que que exporte la
tabla con un nombre sin caracteres raros, a un directorio y que lo haga cada dia a una hora.???

Si esto es asi digamelo para poder informar al administrador de esta base de datos . Es que es un gran problema para mi esto.
Estoy estancado por esto

Gracias de antemano.
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

conectar a tabla sql server de nombre con caracteres especiales

Publicado por Sam (7 intervenciones) el 08/06/2018 13:35:03
Isaias olvida lo que te acabo de poner justo antes de este mensaje de ahora.

He conseguido conectar con la base de datos.
Y he conseguido mostrar los datos de la tabla en cuestion.

Lo que necesito es exportar la tabla, para ello tengo un script pero para variar no me funciona si pudieran ayudarme con el script

lo agradeceria mucho:

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
$conexArrayBBDD = array (
    "UID" => "UsuarioNombre",
    "PWD" => "1234567",
    "Database" => "empresa",
);
 
 
 
$conexBBDD = sqlsrv_connect('000.000.000', $conexArrayBBDD);
 
 
 
if ($conexBBDD)
{
    //Declaro las variables necesarias
 
    $tabla = '';
    $salida = '';
 
    //Consigo las tablas necesarias
 
    if($tablas == '*')
    {
        $tablas = array();
 
        $resultado = $conexBBDD->sqlsrv_query("SHOW TABLES");
 
        while($fila = $resultado->sqlsrv_fetch_row())
        {
            $tablas[] = $fila[0];
        }
    }
    else
    {
        $tablas = is_array($tablas)?$tablas:explode(',',$tablas);
    }
 
 
 
    //Hago un recorrido
    foreach($tablas as $tabla)
    {
        $resultado = $conexBBDD->sqlsrv_query("SELECT * FROM " . $tabla);
 
        $numColumnas = $resultado->field_count;
 
        //$salida .= "DROP TABLE " . $tabla;
 
        $resultadoDos = $conexBBDD->sqlsrv_query("SHOW CREATE TABLE " . $tabla);
 
        $filaDos = $resultadoDos->sqlsrv_fetch_row();
 
        $salida .= "\n\n".$filaDos[1].";\n\n";
 
 
 
        for($i = 0; $i < $numColumnas; $i++)
        {
            while($fila = $resultado->sqlsrv_fetch_row())
            {
                $salida .= "INSERT INTO " . $tabla . " VALUES(";
 
                for($j=0; $j < $numColumnas; $j++)
                {
                    $fila[$j] = addslashes($fila[$j]);
 
                    //$fila[$j] = ereg_replace("\n","\\n",$fila[$j]);
                    $fila[$j] = preg_replace("/\n/","\\n",$fila[$j]);
 
                    if (isset($fila[$j]))
                    {
                        $salida .= '"'.$fila[$j].'"' ;
                    }
                    else
                    {
                        $salida .= '""';
                    }
 
                    if ($j < ($numColumnas-1))
                    {
                        $salida.= ',';
                    }
                }
 
                $salida .= ");\n";
            }
        }
 
        $salida .= "\n\n\n";
    }
 
 
    //Guardo el archivo
 
    $referencia = fopen('historial/tabla-backup-'.time().'.sql','w+');
 
    fwrite($referencia,$salida);
 
    fclose($referencia);
 
}//Fin de If
else
{
    die(print_r(sqlsrv_errors(), true));
}
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

conectar a tabla sql server de nombre con caracteres especiales

Publicado por Sam (7 intervenciones) el 08/06/2018 14:07:45
Se me ha olvidado añadir justo debajo de :

1
2
3
if ($conexBBDD)
 
		{

Poner esto:

1
2
3
if(($resultado = sqlsrv_query($conexBBDD,"SELECT * FROM [dbo].[Hispamicro$Tarifa Proveedor]")) !== 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
Imágen de perfil de Wilfredo Patricio Castillo
Val: 268
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

conectar a tabla sql server de nombre con caracteres especiales

Publicado por Wilfredo Patricio Castillo (189 intervenciones) el 08/06/2018 17:30:54
Si mal no recuerdo ese script es de PHP, y este es un foro de SQL Server.

Deberías poner tu script en un foro de PHP.

Saludos cordiales,
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

conectar a tabla sql server de nombre con caracteres especiales

Publicado por Isaias (4558 intervenciones) el 08/06/2018 17:52:35
Si, se puede generar el archivo TXT de forma automatica, ya que SQL Server tiene un servicio llamado AGENT, que sirve para programar TAREAS.
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