Ответ 1
Свойство @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
для уверенного, чтобы получить только одно значение - иначе этот оператор может выйти из строя (если выбрано несколько строк).