是否可以将表名作为输入参数传递给存储过程?

例如:

create procedure test
@tablename char(10)
as
begin
select * from @tablename
end
go

我知道这行不通。那么,如果要将表名传递到存储过程中,最好的方法是什么?

非常感谢

最佳答案

最安全的方法是通过 View 。

创建一个 View ,该 View 合并您可能希望访问的所有表(并且它们都必须具有相同的列结构),并在表名前添加行。

CREATE VIEW MultiTable
AS
    SELECT 'table1' AS TableName, * FROM table1
    UNION ALL
    SELECT 'table2' AS TableName, * FROM table2
    UNION ALL
    SELECT 'table3' AS TableName, * FROM table3

您的存储过程现在可以按表名称进行过滤:
CREATE PROCEDURE test
    @TableName varchar(100)
AS
    SELECT * FROM MultiTable WHERE TableName = @TableName

这比使用动态SQL创建和执行更为安全。

关于tsql - 在SQL存储过程中传递表名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10734465/

10-12 03:47