2009-04-23 13 views
10

Vea usted mismo:¿Por qué un espacio es un nombre de columna válido en SqlServer?

create table #temp ([ ] varchar(1)) 
insert into #temp values ('1') 
select [ ] from #temp 

Lo que en el mundo es la razón por permitir esto?

+0

Eso es interesante; +1 por señalar un capricho ... –

+2

¡esta es solo una manera de atornillar alguna savia pobre que mantendrá una aplicación dentro de 5 años! Puedo ver cómo se quitan el pelo tratando de entender alguna consulta dinámica y de dónde provienen los datos. haa, es como GOTO TOP, pero pones la "parte superior" en la parte inferior, o declaras una variable llamada Five y la configuras en 5 pero cambias el valor en algún otro lugar, ¡este es un clásico en proceso! –

Respuesta

10

Creo que la razón es más a lo largo de las líneas de:

¿Vale la pena la prevención de esta funcionalidad ?

No sé cómo SQL está codificado internamente, pero sospecho que tomará más esfuerzo evitar esto y luego permitirlo.

+0

ahora esto es bueno :) Me gusta su justificación +1 –

+0

Bastante. Probablemente tengas razón al decir que se necesita más esfuerzo para prevenirlo. –

9

Lo uso todo el tiempo como marcador de posición/separador al depurar consultas complejas. Podría tener algo como esto:

SELECT a.*, ' ' as [ ], b.* 
FROM a 
LEFT JOIN b on ... 

De esta manera consigo una sección en blanco entre las dos tablas para que pueda ver fácilmente en los resultados en los que uno se detiene y comienza la otra.

Más adelante cuando obtengo los resultados y el rendimiento necesito cambiar la cláusula de selección para usar solo las columnas que me interesan.

Dicho eso, supongo que no hay ninguna razón por la que no pueda usar otra cosa para el nombre de la columna.

+1

+1 genial pequeño truco para una molestia mía gracias – JoshBerke

2

Supongo que un espacio es como cualquier otro personaje. Incluso puedes crear una tabla llamada []. (Lo intenté, y funcionó.) Creo que simplemente no hay restricciones en esto.

+0

¿Una mesa también? Yikes. No pensé en intentar eso. –

4

Cualquier carácter válido se puede utilizar entre [] para definir la columna & nombres de tabla. Dado que algo como [Una columna] es válido (con espacio), no hay ninguna razón para evitar un solo espacio como nombre de columna.

Sin embargo, se eliminan los espacios al final.

[ ] and [ ] (1 & 2 spaces)
será tanto tratados como

 
[ ] (1 space). 
+0

¿Es la cita "Sin embargo ..." una cita, o simplemente formateada como una? Si es una cita, por favor agregue un enlace. – Tomalak

+0

He actualizado la respuesta, sin embargo, no es una cita, simplemente arruiné la etiqueta previa. – Steven

4

El espacio es un carácter aceptable, ya que algunas personas les gusta tener espacios en sus nombres de columna. Y si puede ser parte de un nombre de columna, ¿por qué no un nombre de columna en sí mismo?

¿Por qué lo hacen? Seguirá siendo un misterio para mí, ya que hace que la programación sea mucho más difícil (constantemente encerrando todo en "" o []). De hecho, he visto un nombre de columna con un signo de interrogación, que definitivamente es algo que evitaría usar en cualquier identificador, pero aún es posible.

+0

¡Ack! En cierto modo, eso es aún peor. –

2

Aprecio la suposición de que soy lo suficientemente responsable como para no lastimarme con funciones potencialmente peligrosas. No he encontrado una buena razón para espacios en los nombres de los objetos, pero parece ser popular en algunos casos. Este es un ejemplo extremo de correr con tijeras.

Cuestiones relacionadas