2013-06-18 3 views
0

У меня есть таблица, как показано ниже -Обновление колонки с выходом процедуры

  Table1 
    Col1  Col2 Col3 
    1   a  NULL 
    2   b  NULL 
    3   c  NULL 

у меня есть процедура usp_calculateResult (Стлб1, Стлб2).

Теперь я хочу обновить Col3 с выходом процедуры usp_calculateResult. Например, если я хочу обновить Col3 со значением Col1, мы будем выполнять: UPDATE Table1 SET Col3 = Col1. Мне нужно заменить Col1 на выход процедуры.

Я использую SQL Server 2005. Пожалуйста, помогите.

Примечание: usp_calculateResult имеет два входных параметра и один выходной параметр. Я не могу опубликовать процедуру из-за проблемы с безопасностью.

[РЕДАКТИРОВАНИЕ: ADDED]

В соответствии с приведенной ниже дискуссии, я думаю, что я должен сделать функцию аналогична процедуре. Я не вижу других вариантов. Может кто-нибудь прокомментировать это?

+0

Вам действительно нужно выполнить ваш sp для каждой строки ?. Звучит так, что вместо этого вы могли бы использовать вычисляемый столбец. Не можете ли вы запутать ваш sp и рассказать нам, что он делает ?, таким образом мы можем разработать решение на основе набора для этого – Lamak

+0

Вместо использования параметра 'output', который вам нужно сохранить обратно в' Col3' в таблице , почему не может хранимая процедура просто установить значение для 'Col3'? –

+0

Если вы переопределили свой SP как функцию, вы можете называть его как 'UPDATE Table1 SET Col3 = usp_calculateResult (Col1, Col2)', но я согласен, что может стать слишком дорого –

ответ

0

Учитывая, что ваш proc возвращает только одно значение, вы должны переформулировать свой proc как функцию, определенную пользователем. Затем вы должны использовать это для создания расчетного/вычисленного столбца, как здесь (простая формула, приведенная в примере, может быть непосредственно заменена вашей функцией) info здесь http://technet.microsoft.com/en-us/library/ms188300.aspx и здесь http://technet.microsoft.com/en-us/library/ms188300%28v=sql.90%29.aspx

Этот подход будет работать в 2005, 2008, 2012 годах

+0

Мы не можем сделать comuted column. Любой параметр, отличный от того, чтобы заставить расстроенный столбец или процедуру преобразования функционировать. – tik

+0

Похоже, что у вас нет доступа к исходному коду? В этом случае ответ отрицательный. Если это не так, извлеките код, создайте udl и везде, где используется код, замените его на udf и test. Это то, что тестирование против копии разработки. –

Смежные вопросы