Как многие намекали в комментариях, вам нужно будет использовать динамический SQL.Однако динамический SQL может быть небезопасным, и вам следует избегать его использования.
Чтобы ответить на ваш вопрос, вам необходимо использовать что-то вроде этого:
CREATE PROCEDURE AllRowsAndagain
@table1 NVARCHAR(128)
AS
BEGIN
DECLARE @SafeTableName AS NVARCHAR(128)
SELECT @SafeTableName = QUOTENAME( TABLE_NAME )
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = @table1
DECLARE @sql AS NVARCHAR(MAX) = 'select count(*) from ' + @SafeTableName + ';'
EXEC(@SQL)
END
Проверка таблицы на соответствие INFORMATION_SCHEMA.TABLESделает ваш динамический SQL намного безопаснее.Поскольку динамический оператор будет выполняться только в том случае, если в качестве переменной была передана таблица, а не какой-либо вредоносный оператор.