【发布时间】:2015-01-29 18:31:54
【问题描述】:
我有一个基本上有列的表:
ID| SQL_Statement|
1 Update Table_A Set Date=Getdate() where ID>100 and ID<200
2 Update Table_A Set Date=@date where ID>1 and ID<20
所以我插入了一组 SQL 语句,例如 Update/insert 具有我必须在 Runtime 期间传递的参数。现在我想将这些语句动态地调用到存储过程中,并通过提供所需的值来运行它们。 我尝试这样做的原因是为了保持动态。
一旦完成,我所要做的就是继续将我想要执行的 SQL 语句插入到此表中,并且无论如何都不必更改过程。
编辑:
我们正在处理经常更改的 SQL 语句,因此我必须将它放在一个表中,这样我就可以使用 ID 调用特定的 SQL 语句并再次运行该值。根据这些语句的结果,我会更新其他值。
【问题讨论】:
-
用参数替换字符串中的硬编码值并调用 sp_executesql。 msdn.microsoft.com/en-us/library/ms188001.aspx 但是,请注意用户输入。
-
这里不需要使用动态sql。只需创建一个带有两个或三个参数的过程并调用它。
-
如果您使用这种动态 sql 方法,您可以并且应该在动态 sql 中使用参数。这对于避免 sql 注入至关重要。对我来说,存储查询以供以后运行的整个方法非常危险。
-
@SeanLange:你能告诉我这种做法的一个主要缺点吗?
-
我可以很容易地想出一个,这段代码很难写,所以你最终会寻求帮助,因为它太复杂了。
标签: sql sql-server sql-server-2008 stored-procedures dynamic-sql