SQL Server 动态查询

标签 sql sql-server tsql dynamic

我有 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/

相关文章:

mysql - 使用 INTERVAL 的 SQL 查询

mysql - 适用于 H2 和 MySQL 的相对时间查询

sql-server - SQL Server 中 CASE 的替代方案

sql-server - 在 SQL Server 2008 中跨多个表、列使用全文搜索

c# - Azure - 将 .NET Web 应用程序与 azure sql 数据库连接

sql - 多列上的 SELECT COUNT(DISTINCT...) 错误?

SQL Server SELECT 到现有表中

sql - 更高效的双重合并连接替代方案

python - 生成 SQL "IN"子句 : how to safely handle input + empty value lists?

php - 花时间优化 sql 查询 VS 从数据库中推送不必要的数据