Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 output values from Exec SP  [new]
Crayzer
Member

Откуда:
Сообщений: 37
SQL Server 2008 R2
Насилую БД. (Заранее прошу прощения за такое нубство, но работал на ФБ и как-то трудновато въезжать в MS SQL)
Есть ХП, в ней выполняется
 EXEC 
другой ХП, которая должна после своего выполнения вернуть переменные в текущую.

EXEC [dbo].[GETCUSTOMBUDGET]
		@CLID,
		@CBFID = @CBFID OUTPUT,
		@CBID = @CBID OUTPUT,
		@OUTLEVEL = @OUTLEVEL OUTPUT,
		@CBFTYPE = @CBFTYPE OUTPUT,
		@NAME = @NAME OUTPUT,
		@CBFVARNAME = @CBFVARNAME OUTPUT,
		@CBVVALUE = @CBVVALUE OUTPUT,
		@CBVID = @CBVID OUTPUT,
		@CBVVALUE2 = @CBVVALUE2 OUTPUT,
		@BTID = @BTID OUTPUT,
		@CBVTEXT = @CBVTEXT OUTPUT,
		@CBVDATE = @CBVDATE OUTPUT,
		@BSVID = @BSVID OUTPUT,
		@CBFCHECKED = @CBFCHECKED OUTPUT


Так вод вопрос: каким местом вернуть только часть переменных (которые необходимы), а не все переменные OUTPUT из ХП GETCUSTOMBUDGET. При таком перечислении переменных, SQL орет, что мол еще есть не указанные переменные и укажите их...

И еще не,ольшое дополнение к вопросу:
В ФБ возможно к селекту из исполняемой ХП докрутить джоин. Выглядит примерно вот так:
BEGIN
  FOR
    SELECT value1, value2, value3, value4
    FROM GETCUSTOMBUDGET(:value)
    INNER JOIN OTHER_TABLE_NAME ON (GETCUSTOMBUDGET.CBID = OTHER_TABLE_NAME.CBID)


Как провернуть такой джоин на MS-е? Реально уже моск кипит... (((
13 июн 12, 19:59    [12710294]     Ответить | Цитировать Сообщить модератору
 Re: output values from Exec SP  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
Crayzer,

Если будете продолжать пытаться тупо писать для MS SQL в стиле FB, то ваш моск не только закипит, но и взорвется.

По вашей проблеме: Замените процедуру на табличную функцию (по возможности инлайновую).
13 июн 12, 20:11    [12710312]     Ответить | Цитировать Сообщить модератору
 Re: output values from Exec SP  [new]
Crayzer
Member

Откуда:
Сообщений: 37
Точно...
Вот же ж ФБ моск проел как... Довольно трудно перейти на логику МС-а... С инлайном все гораздо проще становится сразу ))))
14 июн 12, 12:59    [12713115]     Ответить | Цитировать Сообщить модератору
 Re: output values from Exec SP  [new]
Crayzer
Member

Откуда:
Сообщений: 37
Но возникает тогда еще один вопрос.. функцией мы получаем таблицу. Понятно, что потом в процедуре делаем
SELECT FIELD1, FIELD2, FIELD3,
FROM dbo.FindReportsForMe(@Param1);


Дальше ХП жестоко колбасит полученные из функции переменные. Естественно, что их надо как-то назначить в текущей процедуре. Как лучше это сделать? Создавать еще одну темповую таблицу, но уже внутри процедуры, и в нее пихать таблицу из переменной? Или извращаться с курсором?
14 июн 12, 13:57    [12713628]     Ответить | Цитировать Сообщить модератору
 Re: output values from Exec SP  [new]
Crayzer
Member

Откуда:
Сообщений: 37
Но возникает тогда еще один вопрос.. функцией мы получаем таблицу. Понятно, что потом в процедуре делаем
SELECT FIELD1, FIELD2, FIELD3,
FROM dbo.FindReportsForMe(@Param1);


Дальше ХП жестоко колбасит полученные из функции переменные. Естественно, что их надо как-то назначить в текущей процедуре. Как лучше это сделать? Создавать еще одну темповую таблицу, но уже внутри процедуры, и в нее пихать таблицу из переменной? Или извращаться с курсором?
14 июн 12, 13:57    [12713630]     Ответить | Цитировать Сообщить модератору
 Re: output values from Exec SP  [new]
Crayzer
Member

Откуда:
Сообщений: 37
Crayzer

Как лучше это сделать? Создавать еще одну темповую таблицу, но уже внутри процедуры, и в нее пихать таблицу из переменной?

Ошибочка ))

*Как лучше это сделать? Создавать еще одну темповую таблицу, но уже внутри процедуры, и в нее пихать таблицу из функции?
14 июн 12, 14:00    [12713645]     Ответить | Цитировать Сообщить модератору
 Re: output values from Exec SP  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
Crayzer,

Код свой покажите.
14 июн 12, 14:08    [12713717]     Ответить | Цитировать Сообщить модератору
 Re: output values from Exec SP  [new]
Crayzer
Member

Откуда:
Сообщений: 37
Функция
CREATE FUNCTION FUNCT_1 (@Param1 INT)
RETURNS @tmp TABLE 
(   
	value1 int, 
	value2 int, 
	value3 int, 

)

AS
 BEGIN

INSERT @tmp
SELECT bla bla bla
FROM bla bla bla
INNER JOIN bla_bla_bla ON (bla_bla_bla = bla_bla_bla)
LEFT OUTER JOIN bla_bla_bla ON (bla_bla_bla = bla_bla_bla)
WHERE bla_bla_bla = @Param1

 RETURN
END


Процедура
BEGIN

select value1, value2, value3
from FUNCT_1 (@Param1)

IF (@value1 = 1)

 BEGIN
   SET @O_WHERE = '';
   SET @O_INNER = '';
 END

ELSE

 BEGIN
   SET @O_WHERE = ' (' + @value1 + ' bla bla bla ' + ')';


Весь код не приводил - не имеет смысла, тут вопрос в переходе от полученной таблицы к переменным...
14 июн 12, 14:38    [12713975]     Ответить | Цитировать Сообщить модератору
 Re: output values from Exec SP  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
Crayzer,

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

Как заполнить переменные результатом запроса:
select @value1 = value1, @value2 = value2, @value3 = value3
from FUNCT_1 (@Param1)
14 июн 12, 15:35    [12714345]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить