Sql server 使用存储过程参数中的表名而不使用动态SQL

Sql server 使用存储过程参数中的表名而不使用动态SQL,sql-server,stored-procedures,dynamic-sql,Sql Server,Stored Procedures,Dynamic Sql,我有一个存储过程,它获取一个表的名称作为其参数之一 CREATE PROCEDURE [Job].[DoSomething] @tableName VARCHAR (5000) AS BEGIN --Use @tableName END 我知道表的列名和所有其他所需信息 我希望在存储过程中使用表名,而不使用动态SQL 有没有办法获取它的句柄(例如OBJECT\u ID/OBJECT\u NAME)并在那里使用这个句柄,我通常会在SQL语句中使用表名 例如(伪代码): 将表名作为

我有一个存储过程,它获取一个表的名称作为其参数之一

CREATE PROCEDURE [Job].[DoSomething]
    @tableName VARCHAR (5000)
AS
BEGIN
    --Use @tableName
END
我知道表的列名和所有其他所需信息

我希望在存储过程中使用表名,而不使用动态SQL

有没有办法获取它的句柄(例如OBJECT\u ID/OBJECT\u NAME)并在那里使用这个句柄,我通常会在SQL语句中使用表名

例如(伪代码):


将表名作为任何存储过程/函数的参数是一个坏主意。如果您坚持使用动态sql(实际上不应该这样做),那么除了使用动态sql之外别无选择。表、架构和列名不能在“常规”sql中参数化-如果您必须这样做(我相信大多数时候这是一个糟糕的设计),那么您除了使用动态sql之外别无选择。
SELECT * 
FROM OBJECT_ID(@tableName)