2

Я изучаю сертификат MCTS 70-433 «Дизайн базы данных», и в тексте, который я изучаю, в одном из самотестирования есть этот вопрос.Предложение OUTPUT для хранимой процедуры и табличной функции

У вас есть хранимая процедура с именем Get_NewProducts. Вы хотите вставить результаты этой хранимой процедуры в таблицу Production.Product и выведите значения INSERTED. *, Используя предложение OUTPUT . Для чего это лучший способ ?

Возможны четыре возможных ответа. Первыми тремя вариантами являются все вариации инструкции «INSERT ... OUTPUT ... EXECUTE Get_NewProducts». Четвертый выбор, D, просто говорит: «Перепишите хранимую процедуру как функцию с табличной оценкой».

D - правильный ответ. Я не совсем понимаю, почему, и в тексте нет ничего, что объясняет это. У кого-нибудь есть идеи?

ответ

5

Ну, из msdn:

«Предложение OUTPUT не поддерживается в операторах DML, которые ссылаются на местные секционированные представления, распределенных секционированных представлений или удаленных таблиц или заявления INSERT, которые содержат execute_statement»

+0

Человек ... это тоже правильно на странице справки TSQL (http://technet.microsoft.com/en-us/library/ms177564.aspx), которую я проверил. Теперь, когда вы указываете это, он прыгает прямо на меня. Еще один случай «прочитать документацию», я думаю :) Спасибо! – womp

+0

Нет, спасибо ... Я использую SQL с 93/94 (вер. 4.2), и я понимаю, что мне нужно прочитать все новые материалы, которые были добавлены в последние несколько выпусков. Я понятия не имел, что Ключевое слово вывода даже существовало до тех пор, пока я не проверил исследования документов, чтобы ответить на ваш вопрос. –

1

Моя реакция коленного рефлекса на это (я ударил его еще раз несколько дней назад) является:

  • Хранимые процедуры могут быть и часто являются вложенными. Процедура A вызывает B, который вызывает C, и так далее.
  • Код, вызываемый оператором INSERT ... EXECUTE ... не может содержать или ссылаться на инструкцию INSERT ... EXECUTE .... Если положить один, вы не можете, то «встраивать» эта процедура позже INSERT ... EXECUTE ...

Это может показаться тривиальным, и это, как правило, по крайней мере, пока вы не ударил его во время рефакторинга проект. Идиома: обжегся на молоке - дует на воду. (И это бит меня несколько раз.)

Есть много причин стиля и внешнего вида, но они поверхностны. Вероятно, существует серьезная техническая причина, возможно, связанная с перекомпиляцией или выполнением планов выполнения запросов; если так, надеюсь, кто-то еще опубликует их.

0

Только одна причина, по которой их «правильный ответ» неверен: у телевизоров есть проблемы с проверкой ошибок и отчетности.

Это действительно странный вопрос/ответ, потому что D даже не кажется возможным, учитывая вопрос.

0

Я не знаю «правильный» ответ, но я думаю, что мышление автора является то, что 70-433 Database Development является разработка и дизайн ориентированный экзамен, в отличие сказать один из «доступа к данным» экзамены вроде 70-442. На этапе проектирования вы должны уметь выявлять неисправности в существующей системе и предлагать лучшие решения. Автор считает, что хранимую процедуру, которая должна иметь свой вывод, вставленный в таблицу, лучше переписывать как TVF. Вы найдете как минусы, так и плюсы, так как TVF лучше, чем proc (вставить exec nesting pro, bad error handling con для начала).

Я сам взял некоторые из этих экзаменов, и я обнаружил, что материал для подготовки к экзамену и сами экзамены не всегда являются абсолютной конечной ссылкой на их предмет. В целом они правильные и хорошие, но у них есть проблемы здесь и тут, и я нашел по крайней мере некоторые сомнительные рекомендации и даже простые неправильные.И по тем, что я обнаружил, что я ошибаюсь, я на самом деле утра предельная ссылка на эту тему, они охватывали код, который я написал об особенностях, которые я разработал ...

Мой совет - узнать, что такое «ожидаемый» ответ и быть готовым к нему во время фактического экзамена. Учитывая ваши таланты и ваш ответ, который я видел, вы уже выше экзамен уровня, так что просто пройти через обручи, заработать свой экзамен значок и двигаться дальше.

+0

Спасибо за добрые слова. Я согласен с тем, что подготовительный материал не является конечной ссылкой - я просто ненавижу его, когда текст ссылается на что-то подобное, что вы не можете обнаружить из самой книги. Честно говоря ... Я не слишком впечатлен текстом в целом ... это книга «Prep Kit» от Syngress. Нужно еще несколько редакторов взглянуть на это IMO. – womp