【发布时间】:2010-09-18 17:35:49
【问题描述】:
我正在考虑动态创建存储过程。
即在(Web)应用程序运行时运行 CREATE PROCEDURE...。
它可能导致什么风险或问题?
- 我知道数据库帐户需要有额外的权限。
- 它不会每天都发生。只是偶尔。
- 我正在使用 sql server,并且对 mysql 和 postgres 也很感兴趣。
更新1:
感谢 cmets,我正在考虑创建一个新版本的存储过程并切换而不是 ALTERing sp。例如:sp1 -> sp2 -> sp3
更新2:
原因:
我的架构因自定义字段而改变(未知的列数和类型) 我首先尝试了动态 sql 和 sp_executesql。当然可以。动态 sql 适用于 1,2,3 简单更新、插入。
但是它变得太丑了,工作量很大,并且不能很好地与存储过程混合,sql参数化问题,因为它在存储过程中使用并且参数的数量和类型在编译时是未知的(长故事)。
至少这个解决方案的基本场景没有那么复杂。 sp 的逻辑不会改变。对于每个自定义字段,我必须向 sp 添加一个新参数并添加一个列来更新、插入等。
我还考虑过使存储过程参数动态化,例如 sp_executesql,它接受任意数量和类型的参数,但找不到方法。
【问题讨论】:
-
如果您不介意我问,您能否详细说明您考虑此选项的一些“充分理由”?
-
架构因自定义字段而发生变化。我可以使用动态 sql,但缺点是性能问题,它使其他事情变得困难。动态 sql 在简单的情况下运行良好,但不适用于(有点复杂的)存储过程。有很多细节...
标签: sql sql-server tsql stored-procedures