Вы уверены, что это ошибка? Я проверил этот запрос, и он вернул две ошибки:
- Not declared @TableName
- Not declared @Sql
Когда вы объявляете эти переменные, это должно работать хорошо.
Но лучше использовать sp_executesql .
Пример:
EXEC sp_executesql
N'SELECT * FROM AdventureWorks.HumanResources.Employee
WHERE ManagerID = @level',
N'@level tinyint',
@level = 109;
Первый аргумент - это запрос с параметрами, 2-й аргумент - имена параметров с типами, разделенными запятыми, а затем идут фактические значения параметров.
РЕДАКТИРОВАНИЕ:
Вот еще один пример использования OUTPUT параметра:
DECLARE @retCnt INT
EXEC sp_executesql
N'SELECT @retCnt = COUNT(*) FROM sys.tables',
N'@retCnt INT OUTPUT',
@retCnt = @retCnt OUTPUT
SELECT @retCnt
SELECT верните 5 на моем компьютере.