2011-05-20 43 views
11

Tengo un SQL dinámico que genera nombres de columna. Un ejemplo rápido podría ser algo como esto:Cómo escapar de corchetes entre corchetes para el nombre de campo

SELECT dbo.getSomething(123) [Eggs[scrambled] or Bacon[fried]] 

El nombre de la columna final debe ser la siguiente:

huevos [revueltos] o tocino [frito]

Si trato de correr este error en la palabra O (incluso si lo reemplazo con xyz todavía hay errores en ese token). El problema se soluciona si elimino los conjuntos internos de corchetes. Así que mi conclusión es que no puedes anidar corchetes a menos que de algún modo los escales.

¿Cómo puedo escapar de ellos en este caso?

Respuesta

18

Puede utilizar la función quotename para ver el escape adecuado.

select quotename('Eggs[scrambled] or Bacon[fried]') 

devoluciones

[Eggs[scrambled]] or Bacon[fried]]] 

Así que todos los corchetes de cierre tienen que ser doblada.

8

Cuelgue un ] en el extremo de la línea []

SELECT [Eggs[scrambled]] or Bacon[fried]]] FROM Yummy 
+0

Si pudiera dar tanto la respuesta aceptada que lo haría. –

+0

@Joe: Debería aceptar que la respuesta de Martin es definitivamente la mejor, ya que no solo explica la regla sino que también le muestra cómo generar el nombre correcto automáticamente (es decir, sin pedir StackOverflow). –

+0

@Andriy Su realmente no explica la regla (mientras que este sí lo hace). Simplemente tiene un ejemplo de que tengo que resolverlo –

3

SET QUOTED_IDENTIFIER está activada por defecto por lo que no hay necesidad de escapar nada

SELECT 1 AS "[Eggs[scrambled] or Bacon[fried]]" 
+3

No es del todo cierto que no haya necesidad de escapar de nada. ¡Las citas todavía necesitarán escaparse! –

+0

@Martin: lordy tienes razón. TFI Friday – gbn

+0

Salir de las cotizaciones significa 'SELECT 1 AS" [Eggs "" codificado "" o Bacon [frito]] "'? – LaBracca

Cuestiones relacionadas