我发现2个Q / A是相同的(根据我),但给定的答案是不同的,所以我希望你的意见正确的答案(或者这可能实际上不是同一个问题...)
以下是问题:
您的应用程序包含每个国家/地区的存储过程。每 存储过程通过以下方式接受员工标识号 @EmpID参数。您需要为每个员工构建一个流程 将执行基于的适当的存储过程 居住国家。你应该使用哪种方法?
- 包含CASE
的SELECT语句- 光标
- BULK INSERT
- 查看
- 用户定义的功能
醇>正确答案:5(用户定义的功能)
第二个:
您的应用程序包含每个国家/地区的存储过程。每 存储过程通过以下方式接受员工标识号 @EmpID参数。您计划为每个员工构建一个流程 将执行基于的存储过程 居住国家。你应该使用哪种方法?
- 递归存储过程
- 触发
- 包含CASE
的UPDATE语句- 光标
- foreach SQLCLR声明
醇>正确答案:4(光标)
在我看来,Cursor解决方案是正确的......
答案 0 :(得分:4)
第一个有点奇怪。创建函数的documentation明确地说:
- 用户定义的函数不能调用存储过程,但可以调用扩展存储过程。
目前还不清楚作者的意图是什么,但我对答案(5)的问题规则的解读。
我可能不喜欢光标用于工作,但是对于指定的选项,它似乎是唯一适用的解决方案。
答案 1 :(得分:2)
在第一个问题上,您无法从选择,插入,视图或函数调用存储过程,因此只留下光标。但这是一个糟糕的答案。光标不是"单个进程"。它是一个指针,一个可以在单个进程中使用的工具。因此,如果使用游标,循环遍历一系列员工记录,则可能是在存储过程中。
对我来说,这将是答案,"存储过程",它包含在你的第二个问题中,有点像。在第二个问题中它表示"递归存储过程"。递归部分困扰我,因为存储过程不需要递归调用另一个存储过程。所以问题2中的选项1是中等的,但有问题。
我在第二个问题上排除了选项3,4和5的原因与我排除问题1中的所有选项的原因相同。这就是触发器。完全有可能您可以在触发器上调用此国家/地区存储过程,该触发器在插入或更新新员工时运行。根据应用程序,这可能是一个很好的解决方案。因此,问题2留下了一个半的好答案(#2和#1)。
底线,问题1没有真正好的答案,问题2有两个至少是半可接受的。如果是我问这个问题,我会使用问题1中的选项,但用"存储过程"替换选项号2(光标)。