我有 15 个存储过程,它们从一个公用表返回数据,然后将该表与特定表连接起来以检索库存。
例子:
Common: tblCommon
Specific: tblSpecific
有没有办法将名称“tblSpecific”作为变量传递到单个存储过程中,如下所示?
SELECT ....
FROM tblCommon c
INNER JOIN @TABLE s on c.primaryKey = s.foreignKey
最佳答案
执行此操作的方法是使用动态生成的 SQL,它通过 sp_executesql() 存储过程运行。
通常,您将所需的表名传递给您的主过程,为要执行的 SQL 构建一个 ncharvar 字符串,然后将其传递给 sp_executesql。
The curse and blessing of Dynamic SQL是我见过的描述所有内容的最好的页面。
最大的陷阱之一是,如果您使用动态 SQL,那么调用您的存储过程的用户不仅必须具有该过程的执行权限,而且还必须具有访问基础表的权限。我提供的链接还描述了如何解决该问题。
关于SQL Server 动态查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/263801/