2011-03-02 12 views
5

En mi secuencia de comandos T-SQL, me refiero al mismo nombre de tabla larga varias veces. Yo uso esta consulta en diferentes tablas.T-SQL Nombre de tabla alias

¿Hay alguna forma de referir el nombre de una tabla por variable? Si es así, puedo simplemente declarar una variable en la parte superior que script usará y simplemente estableciendo el valor, puedo ejecutarlo en varias tablas sin hacer cambios en el script.

Respuesta

1

Se puede crear un sinónimo para esa mesa, pero, obviamente, que había necesidad de asegurarse de que nadie cambió la definición del sinónimo, mientras que el guión estaba funcionando (y no hay invocaciones paralelas de la secuencia de comandos)

¿Usted está funcionando estos en SSMS? Si es así, podría establecer el modo SQL CMD (en el menú "Consulta") y el uso de

:setvar tablename "spt_values" 

use master 

select * from $(tablename) 
+0

Gracias señor, esto funciona. – user219628

1

Usted puede hacer esto como tal:

Declare @TableName As nvarchar(max) 
Declare @SQL AS nvarchar(max) 
@TableName = 'longtablename' 

@SQL = 'Select * From ' + @TableName 
EXEC(@SQL) 
+0

SQL dinámico, ¡Uf! Esto tiene toda clase de efectos secundarios que el OP podría no querer relacionados con los permisos y la recompilación de los planes de consulta. – JohnFx

+2

@JohnFx, bien, él pidió una forma de hacerlo, y honestamente no hay nada de malo con Dynamix SQL si sabes lo que estás haciendo. Además, si cambias las tablas, vas a tener todos esos problemas de todos modos. – msarchet

+0

No entendí la parte de cambiar el nombre de la tabla como una variable. En ese caso, SQL dinámico podría ser la mejor opción. Sin embargo, todavía digo que lo use como último recurso. – JohnFx

8

un par de opciones.

Dentro de una única sentencia de SQL puede ser alias de nombres de tabla, así:

SELECT * 
FROM MySuperLongTableName T 
WHERE T.SomeField=1 

Si lo que necesita hacer esto una gran cantidad de declaraciones a través de varios guiones sinónimo podría ser una mejor opción:

CREATE SYNONYM SuperT FOR dbo.MySuperLongTableName 
+0

esto funciona también, gracias señor – user219628

+0

¡Neto! Sin embargo, en mi intento de demostrar que funciona, descubrí que necesitaba poner una palabra clave "para" entre el sinónimo y el nombre del objeto. Según http://msdn.microsoft.com/en-us/library/ms177544.aspx. ¿Funciona para usted sin el "para"? ¿Si es así, cómo? – Cyberherbalist

Cuestiones relacionadas