T-SQL tiene el tipo SYSNAME para almacenar cosas como nombres de tabla:
El tipo de datos nombre_sist se utiliza para columnas de tablas, variables, y se almacena parámetros de procedimiento que almacenan nombres de objeto. La definición exacta de sysname está relacionada con las reglas para los identificadores. Por lo tanto, puede variar entre instancias de SQL Server. sysname es funcionalmente el mismo como nvarchar (128) excepto que, de forma predeterminada, sysname NO ES NULO. En versiones anteriores de SQL Server, sysname se define como varchar (30).
Así que trate de declarar la variable de la siguiente manera:
DECLARE @tableName SYSNAME;
Usando la declaración VARCHAR(100)
, como se sugiere en otras respuestas, se producirá un error si el nombre de la tabla contiene caracteres fuera de la página de códigos actual o es más largo que el 100 caracteres.
Este extracto de SQL Server de rules for identifiers se describe la forma de un nombre de tabla:
El primer carácter debe ser una de las siguientes:
Una carta según la definición de la Estándar Unicode 3.2. La definición de letras de Unicode incluye caracteres latinos de la a la z, de de la A a la Z, y también caracteres de letras de otros idiomas.
El carácter de subrayado (_), en el signo (@), o el signo de número (#).
Ciertos símbolos al principio de un identificador tienen un significado especial en SQL Server. Un identificador regular que comienza con el signo at siempre denota una variable o parámetro local y no se puede utilizar como el nombre de ningún otro tipo de objeto. Un identificador que comienza con un número de indica una tabla o procedimiento temporal.Un identificador que comienza con signos de número doble (##) denota un objeto temporal global . Aunque los caracteres de signo de número o signo de número doble pueden usarse para comenzar los nombres de otros tipos de objetos, no recomendamos esta práctica.
Algunas funciones de Transact-SQL tienen nombres que comienzan con el doble en los signos (@@). Para evitar confusiones con estas funciones, no debe usar los nombres que comienzan con @@.
caracteres posteriores pueden incluir lo siguiente:
letras como se define en el estándar Unicode 3.2.
Números decimales de Basic Latin u otros scripts nacionales.
El signo a, el signo de dólar ($), el signo de número o el guión bajo.
El identificador no debe ser una palabra reservada de Transact-SQL. SQL Server se reserva tanto la versión en mayúscula como la minúscula de las palabras reservadas.
No se permiten espacios incrustados ni caracteres especiales.
Los caracteres suplementarios no están permitidos.
Ver los enlaces de documentación en mi respuesta para más información.
Si declara una variable como VARCHAR, en realidad está declarando VARCHAR (1). Pruebe VARCHAR (64) o algo en su lugar. – MatBailie
¿Por qué 'select top 2 table_name from INFORMATION_SCHEMA.TABLES order by table_name asc' no es lo suficientemente bueno? – Oded
@Oded: No se puede 'IMPRIMIR' un conjunto de resultados. Es posible que desee imprimir un nombre de tabla en lugar de seleccionarlo si está escribiendo un script que produce otro script como salida. –