Ваше свойство @tblName
существует во внешней области видимости - области ваших "нормальных" строк кода - но не во внутренней области SQL, которую вы строите в этой строке ....
Вам нужно изменить ваши строки следующим образом:
SET @strSQL = 'INSERT INTO ' + @tblName + ' VALUES(''trylng'', ''1'')'
, и тогда все будет работать нормально.
Кроме того, вы упоминаете не версию SQL Server, а SQL Server.2005 или новее, вы должны прекратить использовать sysobjects
и sysindexes
- вместо этого используйте новую схему sys
, которая содержит более или менее ту же информацию - но более доступную.Измените свой запрос на:
SET @tblName ='SELECT DISTINCT t.name as TableName
FROM sys.tables t
INNER JOIN sys.indexes i on i.object_id = t.object_id
WHERE t.name LIKE ''%empty%'''
См. MSDN: Запрос к системному каталогу SQL Server , чтобы получить гораздо больше информации о том, что доступно в новой схеме sys
, и о том, как максимально использоватьоб этом!
Как указал "rsbarro": помещать этот оператор SQL в кавычки странно - вы выполняете этот оператор, используя EXEC(...)
тоже ??Но тогда как вы присваиваете значение обратно свойству @tblName
?Не имеет смысла .....
Если вы хотите выполнить этот запрос, чтобы получить значение, у вас должно быть что-то вроде этого:
SELECT TOP 1 @tblName = t.name
FROM sys.tables t
INNER JOIN sys.indexes i on i.object_id = t.object_id
WHERE t.name LIKE '%empty%'
Вам нужно иметьTOP 1
там должно быть обязательно , чтобы получить только одно значение - в противном случае этот оператор может завершиться ошибкой (если выбрано несколько строк).