是否可以将表名作为输入参数传递给存储过程?
例如:
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/