gun*_*erz 5 t-sql stored-procedures
是否可以将表名作为输入参数传递给存储过程?
例如:
create procedure test
@tablename char(10)
as
begin
select * from @tablename
end
go
Run Code Online (Sandbox Code Playgroud)
我知道这不起作用.那么,如果我想将表名传递给存储过程,最好的方法是什么?
非常感谢
Dan*_*haw 10
最安全的方法是通过视图.
创建一个视图,该视图将您可能希望访问的所有表(以及必须具有相同列结构的所有表)联合起来,并在行前加上表名.
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
Run Code Online (Sandbox Code Playgroud)
您的存储过程现在可以过滤表名:
CREATE PROCEDURE test
@TableName varchar(100)
AS
SELECT * FROM MultiTable WHERE TableName = @TableName
Run Code Online (Sandbox Code Playgroud)
这比使用动态SQL创建和执行更安全.