如何对不同的表使用相同的存储过程并避免使用动态sql

Man*_*ion 0 sql-server stored-procedures dynamic-sql

我有很多包含一些常见列(相同名称和数据类型)的表。在这些列上,我需要执行相同的操作,我想通过存储过程来执行此操作。但是,我目前可以使其工作的唯一方法是使用动态 sql,我宁愿避免这种情况。

有没有什么方法可以在不使用动态sql的情况下对不同的表(其中表名作为参数传递)使用存储过程?

Sea*_*ean 7

您可以做的另一件事是创建一个视图,将类似的表联合在一起,并包含一个带有表名的定义列,然后在 where 子句中使用表名对该视图进行选择。

CREATE VIEW tablesviews AS
SELECT columns, 'TABLE1' as tablename
FROM Table1
UNION ALL
SELECT columns, 'TABLE2' as tablename
FROM Table2
...


SELECT {some columns}
FROM  tableviews
WHERE Tablename=@table and [other where clauses]
Run Code Online (Sandbox Code Playgroud)