DECLARE @Count INTEGER
DECLARE @nSQL NVARCHAR(1000)
SET @nSQL = 'SELECT @Count = COUNT(*) FROM ' + @tablename
EXECUTE sp_executesql @nSQL, N'@Count INTEGER OUT', @Count OUT
-- Now check @Count
Будьте особенно осторожны с такими динамическими SQL, как вы открываете себя для SQL инъекций. Поэтому убедитесь, что @tablename очищено.
Одна проверка для обеспечения безопасности будет выглядеть примерно так: убедитесь, что таблица существует с использованием параметризованного запроса, прежде чем пытаться выполнить динамический запрос:
DECLARE @Count INTEGER
DECLARE @nSQL NVARCHAR(1000)
SET @nSQL = 'IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME=@TableName)
SELECT @Count = COUNT(*) FROM ' + @tablename + '
ELSE
SELECT @Count = -1'
EXECUTE sp_executesql @nSQL, N'@TableName NVARCHAR(128), @Count INTEGER OUT', @TableName, @Count OUT
Если @Count выходит на -1, вы знаете, что это потому, что имя таблицы неверно
Edit:
Ссылка на sp_executesql здесь