Sql server 存储过程与表值函数的OUTPUT子句

Sql server 存储过程与表值函数的OUTPUT子句,sql-server,tsql,sql-server-2008,stored-procedures,output-clause,Sql Server,Tsql,Sql Server 2008,Stored Procedures,Output Clause,我正在学习MCTS 70-433“数据库设计”证书,在我学习的文本中,一个自测有这个问题 您有一个名为 获取新产品。您希望插入 此存储过程的结果 进入生产。产品表和 使用 输出子句。最好的方法是什么 这样做 有四种可能的答案。前三个选项都是“INSERT…OUTPUT…EXECUTE Get_NewProducts”语句的变体。第四个选项D只是说“将存储过程重写为表值函数” D是正确答案。我不太明白为什么,文本中也没有任何解释。有人有什么见解吗?我对这一点的下意识反应(几天前我又打了一次)是:

我正在学习MCTS 70-433“数据库设计”证书,在我学习的文本中,一个自测有这个问题

您有一个名为 获取新产品。您希望插入 此存储过程的结果 进入生产。产品表和 使用 输出子句。最好的方法是什么 这样做

有四种可能的答案。前三个选项都是“INSERT…OUTPUT…EXECUTE Get_NewProducts”语句的变体。第四个选项D只是说“将存储过程重写为表值函数”


D是正确答案。我不太明白为什么,文本中也没有任何解释。有人有什么见解吗?

我对这一点的下意识反应(几天前我又打了一次)是:

  • 存储过程可以而且通常是嵌套的。过程A调用B,B调用C,依此类推
  • 由INSERT…EXECUTE。。。语句本身不能包含或引用INSERT…EXECUTE。。。陈述如果你把一个放进去,你就不能在以后的插入中“嵌入”这个过程…执行
这可能看起来很琐碎,而且通常是这样,至少在您在重构项目中遇到它之前是这样。一次被咬,两次害羞。(它多次咬我。)

风格和外观方面的原因也有很多,但都有点肤浅。可能有一个严重的技术原因,可能与重新编译或查询执行计划有关;如果是这样的话,希望其他人会发布它们。

只是他们的“正确答案”不正确的一个原因:TVF在错误检查和报告方面存在问题


这是一个非常奇怪的问题/答案,因为在给定问题的情况下,D似乎不是一个可能的答案。

我不知道一个“正确”的答案,但我猜作者的想法是70-433
数据库开发
是面向开发和设计的考试,而不是像70-442这样的“数据访问”考试。在设计阶段,您应该能够发现现有系统中的故障,并提出更好的解决方案。作者认为,需要将其输出插入表中的存储过程最好重写为TVF。您将发现TVF是否优于proc(插入exec nesting pro,错误处理错误错误)的利弊

我自己参加了一些考试,我发现考试准备材料和考试本身并不总是他们科目的绝对终极参考。总的来说,它们是正确的、有价值的,但它们有时也会有问题,我至少发现了一些有问题的建议,甚至是完全错误的建议。在我发现错误的主题上,我实际上是这个主题的最终参考,它们涵盖了我在我设计的功能上编写的代码

我的建议是了解“预期”答案,并在实际考试中做好准备。考虑到你的天赋和我所看到的答案,你已经超过了考试水平,所以只要通过考试,赢取考试徽章,继续前进。

好吧,从:


“引用本地分区视图、分布式分区视图或远程表的DML语句,或包含execute_语句的INSERT语句中不支持OUTPUT子句”

Man。。。它也在TSQL参考页()上,我已经检查过了。现在你指出来了,它就跳到我身上。我想这只是另一个“阅读文档”的例子:)谢谢!不,谢谢你。。。我从93/94(4.2版)开始使用SQL,我意识到我需要阅读最近几个版本中添加的所有新内容。。我不知道输出关键字甚至存在,直到我检查了文档研究来回答你的问题。谢谢你的好话。我同意准备材料不是最终的参考资料——我只是讨厌当一篇文章引用了这样的东西,而你无法从书中发现它。老实说我对这篇文章的整体印象不太好。。。这是Syngress的“准备工具包”书。我需要另外两个编辑来看看。