存储过程在处理时要求输入

Ski*_*eak 4 sql-server delete

所以我问这个是为了看看这是否在 SQL 中是可能的。

我目前正在为一个 VB.Net 应用程序编写一些存储过程,我正在使用它与我的数据库中的数据进行交互。

我正在创建一个程序来删除一组记录,但想知道程序本身是否可以要求确认该项目将被删除。类似于消息提示或程序暂停以等待进一步输入的内容。

如果这不可行,我知道如何在 VB.Net 端管理它,我只是想在数据库本身中保留尽可能多的 SQL 和数据库内容。

Sha*_*tor 9

简短的回答是,存储过程在执行后无法提示接受输入以在事务中使用。

您可以做的是使用存储过程来获取计数或您要验证的值。基于此,您可以在代码中使用逻辑函数,然后调用执行操作的第二个存储过程。

同样,此 IF ELSE 逻辑可以合并到程序中。假设您要从值 = 1 的表中删除所有记录,您希望删除 50 次。您可以调用存储过程并输入值 50,它会运行:

SELECT COUNT(*) FROM TABLE WHERE Value = 1 
Run Code Online (Sandbox Code Playgroud)

您可以进行验证以说明计数大于、小于或等于 50,然后它可以调用另一个过程并将另一个参数传递给它,这可能是一个删除过程,或者它可能只是结束操作。

我通常反对菊花链存储过程,但我喜欢将业务逻辑保留在应用程序中,因此我建议在 VB 中处理它。


Dav*_*oft 7

您可以合理地得出的最接近的是存储过程需要事务。例如

if @@trancount = 0 throw 50001, 'A transaction is required to run this procedure', 10
Run Code Online (Sandbox Code Playgroud)

然后应用程序必须在运行存储过程后显式提交更改。