Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Значение из хранимки в пеерменную  [new]
Grayscale
Member

Откуда: Спб
Сообщений: 1642
Добрый день есть такой код
CREATE PROCEDURE a 
AS
SELECT 1
GO
DECLARE @TMP AS INT
Как мне записать так чтоб результат хранимки я получал в переменную?
6 дек 08, 15:47    [6534105]     Ответить | Цитировать Сообщить модератору
 Re: Значение из хранимки в пеерменную  [new]
Grayscale
Member

Откуда: Спб
Сообщений: 1642
что-то вроде...
SET @TMP=EXEC a
6 дек 08, 15:50    [6534110]     Ответить | Цитировать Сообщить модератору
 Re: Значение из хранимки в пеерменную  [new]
risp
Member

Откуда:
Сообщений: 35
Можно через OUTPUT параметр
6 дек 08, 15:57    [6534120]     Ответить | Цитировать Сообщить модератору
 Re: Значение из хранимки в пеерменную  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
CREATE PROCEDURE a(@x INT OUT)
AS
SET @x=1;
GO
DECLARE @TMP INT;
EXECUTE a @TMP OUT;
PRINT @TMP;
Если результатом процедуры является рекордсет, то в переменную его поместить нельзя, а во временную таблицу - можно.
Начиная с SQL2005 результат можно также поместить в табличную переменную.
6 дек 08, 15:59    [6534123]     Ответить | Цитировать Сообщить модератору
 Re: Значение из хранимки в пеерменную  [new]
Dogmeat
Member

Откуда:
Сообщений: 9
Кстати, очень интересный вопрос. Тоже начал всерьез задаваться им. Например, есть системная хранимая процедура. Она делает выборку, требуется как-нибудь эту выборку проанализировать. Пока что единственный способ который я нашел - вставлять выборку в таблицу.
insert into #ATable (AField) exec sp_helpmergearticle
Косяк такого метода в том, что во-первых приходится создавать временную таблицу, а для этого нужно заранее знать все возвращаемые поля. Во-вторых, что будет если процедура создает несколько выборок?
6 дек 08, 16:04    [6534127]     Ответить | Цитировать Сообщить модератору
 Re: Значение из хранимки в пеерменную  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
iap
а во временную таблицу - можно.
Имелось, конечно, в виду просто "в таблицу".
6 дек 08, 16:19    [6534146]     Ответить | Цитировать Сообщить модератору
 Re: Литература по Oracle  [new]
Grayscale
Member

Откуда: Спб
Сообщений: 1642
Спасибо))))) Мне только один параметр возвращает но на будуще учту)))
6 дек 08, 16:33    [6534155]     Ответить | Цитировать Сообщить модератору
 Re: Значение из хранимки в пеерменную  [new]
MasterZ
Member

Откуда: Москва
Сообщений: 1145
Не буду начинать новую тему, вопрос такойже

Есть хранимка, которая определяет курс валюты - работает
Его надо получить в функции
делаю

CREATE FUNCTION [dbo].[svf_GetRate] 

	(
		@codCurrency varchar(3),
		@d date = null
	)
RETURNS money
AS
BEGIN
	-- Declare the return variable here
	DECLARE @res money
	DECLARE @D1 date
	if @d is null
		set @D1 = getdate()
	else
		set @D1 = @d	
	
	exec dbo.spDefaultRateFromWWW @codCurrency, @D1, @res

	RETURN @res

END

Ошибка

Внутри функции можно вызывать только функции и некоторые расширенные хранимые процедуры.

Фак читал, по моему там информация устарела.
Направьте пожалуйста на путь истинный.
Спасибо.
11 июн 09, 11:50    [7289294]     Ответить | Цитировать Сообщить модератору
 Re: Значение из хранимки в пеерменную  [new]
Glory
Member

Откуда:
Сообщений: 104760
Ну так и что непонятного в сообщении
"Внутри функции можно вызывать только функции и некоторые расширенные хранимые процедуры."
У вас разве функция вызывается ? Или расширенная хранимая процедура ?
11 июн 09, 11:53    [7289313]     Ответить | Цитировать Сообщить модератору
 Re: Значение из хранимки в пеерменную  [new]
A
Guest
У меня тоже вопрос будет из подобной области. Мне нужно затолкать в таблицу (временную) результат работы процедуры, только этот результат может быть с разным набором столбцов.
Если для обычного запроса можно написать select * into #table from .... то как подобное написать для процедуры?
22 июн 09, 10:06    [7326482]     Ответить | Цитировать Сообщить модератору
 Re: Значение из хранимки в пеерменную  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
И что Вы будете делать с временной таблицей, набор полей которой неизвестен ?
22 июн 09, 10:08    [7326489]     Ответить | Цитировать Сообщить модератору
 Re: Значение из хранимки в пеерменную  [new]
A
Guest
Мне грубо говоря ничего с ней делать не надо, ее надо вывести почти как есть и дать возможность юзеру давать команды с ней что-то делать - сортировать по любому полю, фильтровать по каким-то параметрам и т.д. До некоторой степени мне известна совокупность полей, т.е. что вообще может там быть, но в каждом конкретном случае каких-то полей может и не быть.
22 июн 09, 12:10    [7327378]     Ответить | Цитировать Сообщить модератору
 Re: Значение из хранимки в пеерменную  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
а почему вы в процедуре знаете структуру полей, а после выхода из процедуры не знаете?
и что мешает в процедуре использовать
create proc dbo.myproc
as begin
...
select * from #tmptable
end

для спящего время бодрствования равносильно сну
22 июн 09, 12:23    [7327489]     Ответить | Цитировать Сообщить модератору
 Re: Значение из хранимки в пеерменную  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
A
в каждом конкретном случае каких-то полей может и не быть.
перечень этих конкретных случаев наверняка конечен и известен ?

1) делаете алгоритм, который заранее создаст временную таблицу нужной структуры
(в зависимости от "конкретного случая")

2)
insert into #ATable exec ...
22 июн 09, 12:23    [7327491]     Ответить | Цитировать Сообщить модератору
 Re: Значение из хранимки в пеерменную  [new]
А
Guest
>Алексей2003
Я знаю что там может быть, но не знаю что будет в конкретном случае, при разных входных параметрах процедуры набор результирующий полей разный

>Паганель
Процедура к сожалению не моя, и количество этих "конкретных случаев" имеет свойство расширяться, сейчас уже таких полей, которых может быть, а может и не быть порядка 20 штук и что еще придумают я не знаю, поэтому хотелось бы решить эту задачу в общем виде, чтобы не пришлось весь алгоритм перестраивать под каждое изменение процедуры
22 июн 09, 13:48    [7328147]     Ответить | Цитировать Сообщить модератору
 Re: Значение из хранимки в пеерменную  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
если вы так завязаны на вашу процедуру, можно сделать следующее, до вызова процедуры создавать временную таблицу, в котором есть колонка, присутствующая во всех выборках (или фиктивную).
в процедуре ее изменять как необходимо, а потом после выхода уже будет та самая #table.

для спящего время бодрствования равносильно сну
22 июн 09, 14:00    [7328235]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить