Как взять имя таблицы в качестве входного параметра хранимой процедуры?


У меня есть небольшая хранимая процедура ниже.

Я беру имя таблицы в качестве входного параметра в хранимую процедуру, так что я планирую вставить данные в временную таблицу и отобразить их. Это всего лишь крошечный блок кода моей хранимой процедуры проекта.

Когда я компилирую ниже, он рассматривает параметр в инструкции select как переменную таблицы и выдает ошибку как:

Необходимо объявить переменную таблицы "@TableName".

SQL:

CREATE PROCEDURE xyz @TableName Varchar(50) 
AS 
BEGIN 
SELECT TOP 10 * INTO #Temp_Table_One 
FROM @TableName 

SELECT * FROM #Temp_Table_One 
END
2 7

2 ответа:

CREATE PROCEDURE xyz 
@TableName NVARCHAR(128) 
AS 
BEGIN 
  SET NOCOUNT ON;
  DECLARE @Sql NVARCHAR(MAX);

SET @Sql = N'SELECT TOP 10 * INTO #Temp_Table_One 
              FROM ' + QUOTENAME(@TableName)
          + N' SELECT * FROM #Temp_Table_One '

 EXECUTE sp_executesql @Sql

END

Использовать SQL dynamic

Попробуйте

CREATE PROCEDURE xyz @TableName Varchar(50) 
AS 
BEGIN 
 DECLARE @query
 set @query = 'SELECT TOP 10 * FROM '+ @TableName 
 EXEC @query
END

Добавьте имя схемы.

Например:

Exec xyz @TableName = ' dbo.mytable '

Exec xyz @TableName = ' myschema.mytable '