Pregunta

En Java JDBC, que puede fácilmente ejecutar el siguiente código SQL (NOTA las comillas dobles columnas y los nombres de tabla)

Select 
       cus."customer_id" ,
       cus."organisation_or_person" ,
       cus."organisation_name" ,
       cus."first_name" ,
       cus."last_name" ,
       cus."date_became_customer" ,
       cus."other_customer_details"
From 
      "Contact_Management"."dbo"."Customers"    cus

Sin embargo, la misma consulta en los errores de PHP sin decir inválida sintaxis

"Advertencia: mssql_query () [function.mssql-query]: mensaje:. Sintaxis incorrecta cerca 'customer_id' (severidad 15)"

Sin embargo, si se retiran todos los comillas dobles, la consulta funciona bien y sin errores.

La consulta es portado desde una aplicación Java así que me gustaría mantener las comillas dobles y el SQL tal como es. Cualquier solución alternativa?

Gracias Nilesh

Volkerk - Solución (SET QUOTED_IDENTIFIER ON)

hice lo siguiente

    $sql = <<<EOD
Select 
       cus."customer_id" ,
       cus."organisation_or_person" ,
       cus."organisation_name" ,
       cus."first_name" ,
       cus."last_name" ,
       cus."date_became_customer" ,
       cus."other_customer_details"
From 
      "Contact_Management"."dbo"."Customers"    cus
EOD;

$db->Execute('SET QUOTED_IDENTIFIER ON');
    $rs = $db->Execute($sql); 

Y funcionó perfecto

Muchas gracias ..

¿Fue útil?

Solución

QUOTED_IDENTIFIER probablemente está establecido en OFF.

http://msdn.microsoft.com/en-us/library /ms174393.aspx dice:

SET QUOTED_IDENTIFIER (Transact-SQL)
[...]
Cuando SET QUOTED_IDENTIFIER es ON, los identificadores pueden estar delimitados por comillas dobles, y literales deben estar delimitados por comillas simples. Cuando SET QUOTED_IDENTIFIER es OFF, los identificadores no puedo ser citado y debe cumplir con todas las normas de Transact-SQL de los identificadores. Para obtener más información, consulte Identificadores
[...]
El controlador ODBC de SQL Server Native Client y el proveedor de SQL Server Native Client OLE DB para SQL Server establece automáticamente QUOTED_IDENTIFIER en ON cuando se conecta. Esto se puede configurar en las fuentes de datos ODBC, en los atributos de conexión ODBC, o propiedades de conexión OLE DB. El valor predeterminado de SET QUOTED_IDENTIFIER es OFF para conexiones desde aplicaciones de DB-Library.

configurarlo para On y ya está bueno para ir.

Otros consejos

No es exactamente como está, pero que podría reemplazar las comillas dobles " con acentos abiertos:

Select 
       cus.`customer_id` ,
       cus.`organisation_or_person` ,
       cus.`organisation_name` ,
       cus.`first_name` ,
       cus.`last_name` ,
       cus.`date_became_customer` ,
       cus.`other_customer_details`
From 
      `Contact_Management`.`dbo`.`Customers`    cus

¿Qué hay de esto?

$query ='Select 
   cus."customer_id" ,
   cus."organisation_or_person" ,
   cus."organisation_name" ,
   cus."first_name" ,
   cus."last_name" ,
   cus."date_became_customer" ,
   cus."other_customer_details"
From 
  "Contact_Management"."dbo"."Customers"    cus';

$query = str_replace('"', '', $query);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top