sql-server - 如何将表名作为存储过程的输入参数?

标签 sql-server stored-procedures table-variable

我下面有一个小的存储过程。

我将表名作为存储过程的输入参数,以便我计划将数据插入到临时表中并显示相同的数据。这只是我的项目存储过程的一个很小的代码块。

当我编译下面的代码时,它将 select 语句中的参数视为表变量并抛出错误:

Must declare the table variable "@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

最佳答案

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-server - 如何将表名作为存储过程的输入参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22105121/

相关文章:

json - 使用 OPENJSON 解析 JSON 时语法不正确

sql - 如何回滚隐式SSMS事务(末尾带有go的语句)?

sql - 重命名 SQL Server 架构

sql-server - SQL Server 临时表和连接池

c# - SQL Server CLR 和 T-SQL 存储过程与调用者是否相同?

sql - 在内存或 tempdb 中创建和保存的表变量?

SQL Server 2008 版本的 OVER(... Rows Unbounded Preceding)

mysql - 在 MySQL 的存储过程中写入可选参数?

sql-server - 在存储过程中使用表变量还是仅从表或 View 中进行选择?

sql - 如何在动态sql语句中使用表变量?