2

我正在学习MCTS 70-433“数据库设计”证书,在我正在学习的文本中,其中一个自检具有此问题。存储过程和表值函数的OUTPUT子句

您有一个名为 的存储过程Get_NewProducts。您希望将此存储过程 的结果 插入到Production.Product表中,并且 使用 OUTPUT子句输出INSERTED。*值。 要做到这一点的最佳途径是什么?

有四种可能的答案。前三种选择是“INSERT ... OUTPUT ... EXECUTE Get_NewProducts”声明的所有变体。第四个选项D简单地说“将存储过程重写为表值函数”。

D是正确的答案。我不太明白为什么,文中没有任何内容可以解释它。任何人有任何见解?

回答

5

那么从msdn

“ OUTPUT子句中没有引用本地分区视图,分布式分区视图或远程表,或包含一个execute_statementINSERT语句DML语句支持”

+0

Man ...在TSQL参考页面也是如此(http://technet.microsoft.com/en-us/library/ms177564.aspx),我检查了它。现在你指出了它,它直接跳到我身上。只是另一个“阅读文档”的例子,我猜:)谢谢! – womp 2009-09-30 00:02:23

+0

不,谢谢...自93/94(版本4.2)以来,我一直在使用SQL,并且我意识到我需要阅读所有在最近几个版本中添加的新东西。我不知道输出关键字甚至存在,直到我检查文档研究回答你的问题。 – 2009-09-30 01:04:34

1

我下意识的反应这个(我又打它几天前)是:

  • 存储过程可以而且经常是嵌套的。过程A调用B调用C,依此类推。
  • 由INSERT ... EXECUTE ...语句调用的代码本身不能包含或引用INSERT ... EXECUTE ...语句。如果你放入一个,那么你不能在后面的INSERT中嵌入这个过程... EXECUTE ...

这看起来很平常,一般来说,至少在重构过程中项目。一朝被蛇咬十年怕井绳。 (并且它有点多次。)

还有一些风格和外观的原因,但它们有点肤浅。可能存在严重的技术原因,可能与重新编译或查询执行计划有关;如果是这样,希望别人会发布他们。

0

只有一个原因,他们的“正确答案”是不正确的:TVF有错误检查和报告的问题。

这是一个非常奇怪的问题/答案,因为D似乎没有给出这个问题的可能性。

0

我不知道一个'正确'的答案,但我猜测作者的思想是70-433 Database Development开发和设计面向考试,而不是说'数据访问'考试如70-442。在设计阶段,您应该能够发现现有系统中的故障并提出更好的解决方案。作者认为需要将输出插入表中的存储过程最好重写为TVF。你会发现两者都是弊端,因为TVF是否比proc更好(插入exec嵌套pro,错误处理con只是开始)。

我自己参加了一些这些考试,发现考试准备材料和考试本身并不总是他们的主题的绝对最终参考。在大的他们是正确的和良好的价值,但他们有时间问题,我发现至少一些可疑的建议,甚至明显的错误的。并且在我发现错了,我居然上午关于这个问题的最终参考,他们被覆盖,我的特点,我设计编写代码...

我的忠告是:是什么感觉的主题“预期”答案并在实际考试中为其做好准备。考虑到你的天赋点和我见过的答案,你已经在以上考试级别,所以只需要通过这些环节,赚取考试徽章并继续前进。

+0

感谢您的友好的话。我同意准备材料不是最终参考 - 我只是恨它,当一个文本引用这样的东西,你不能从书本身发现。说实话......我对整体文字印象不深......这是Syngress“Prep Kit”一书。需要另外几个编辑来看看IMO。 – womp 2009-09-30 00:11:58