T-SQL имеет тип SYSNAME для хранения вещей, как имена таблиц:
Тип данных SYSNAME используется для столбцов таблицы, переменные, и хранятся параметры процедуры, которые хранят имена объектов. Точное определение sysname связано с правилами для идентификаторов. Следовательно, он может различаться между экземплярами SQL Server. sysname функционально совпадает с как nvarchar (128), за исключением того, что по умолчанию sysname NOT NULL. В более ранних версиях SQL Server sysname определяется как varchar (30).
Так что попробуйте объявить переменную, как это:
DECLARE @tableName SYSNAME;
Используя VARCHAR(100)
декларацию, как это было предложено в других ответах, будет ошибкой, если имя таблицы содержит символы за пределами вашей текущей кодовой страницы или больше, чем 100 персонажи.
Это выдержка из SQL-сервера rules for identifiers описывает форму имени таблицы:
Первый символ должен быть одним из следующих:
письмо согласно определению Стандарт Unicode 3.2. Unicode определение букв включает латинские символы от a до z, от от A до Z, а также буквенные символы с других языков.
Подчеркнутый знак (_), знак (@) или знак числа (#).
Определенные символы в начале идентификатора имеют специальное значение в SQL Server. Обычный идентификатор, начинающийся со знака at , всегда обозначает локальную переменную или параметр и не может использоваться как имя любого другого типа объекта. Идентификатор, начинающийся с знака числа , обозначает временную таблицу или процедуру.Идентификатор, который начинается с двухзначных знаков (##), обозначает глобальный временный объект . Хотя знаки знака числа или двойного номера могут использоваться для начала имен других типов объектов, мы не делаем , рекомендуем эту практику.
Некоторые функции Transact-SQL имеют имена, начинающиеся с double при знаках (@@). Чтобы избежать путаницы с этими функциями, вы не должны использовать имена , которые начинаются с @@.
Последующие символы могут включать в себя следующее:
письма, как это определено в стандарте Unicode 3.2.
Десятичные числа из базовых латинских или других национальных сценариев.
Знак at, знак доллара ($), знак числа или символ подчеркивания.
Идентификатор не должен быть зарезервированным словом Transact-SQL. SQL Server хранит как зарезервированные слова в верхнем и нижнем регистре.
Встраиваемые пространства или специальные символы не допускаются.
Дополнительные символы не допускаются.
Смотрите документацию ссылки на мой ответ для получения дополнительной информации.
Если вы объявляете переменную как VARCHAR, вы фактически объявляете VARCHAR (1). Попробуйте VARCHAR (64) или что-то вместо этого. – MatBailie
Почему 'select top 2 table_name из INFORMATION_SCHEMA.TABLES order by table_name asc' не достаточно хорош? – Oded
@Oded: вы не можете «PRINT» создать результирующий набор. Возможно, вам захочется напечатать имя таблицы, а не выбрать ее, если вы пишете скрипт, который выдает другой скрипт в качестве вывода. –