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

Откуда:
Сообщений: 359
Здравствуйте, коллеги!
Есть следующая задача, требуется заполнять столбец при вставке значениями из хранимой процедуры. Именно процедуры, а не функции.
Насколько я понимаю единственный способ сделать это, это написать триггер insted of? но как именить поочередно значение столбца в каждой записи таблицы inserted перед вставкой в таблицу.
Процедура имеет примерно следующий вид:

sb_DoWork(@result)

Соответсвенно для каждой строки нужно сделать вызов процедуры
7 июн 13, 09:39    [14403931]     Ответить | Цитировать Сообщить модератору
 Re: Заполнение столбца значениями их хранимой процедуры  [new]
Гость333
Member

Откуда:
Сообщений: 3683
palich12
Соответсвенно для каждой строки нужно сделать вызов процедуры

Это делается при помощи курсора.
А вообще такая схема — полный бардак.
7 июн 13, 09:48    [14404002]     Ответить | Цитировать Сообщить модератору
 Re: Заполнение столбца значениями их хранимой процедуры  [new]
aleks2
Guest
palich12
Насколько я понимаю единственный способ сделать это, это написать триггер insted of?


Что подвигло вас на это идиотское умозаключение?
7 июн 13, 09:49    [14404011]     Ответить | Цитировать Сообщить модератору
 Re: Заполнение столбца значениями их хранимой процедуры  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1578
palich12
при вставке значениями из хранимой процедуры. Именно процедуры, а не функции.
А функции уже научились менять данные в таблицах? Я что-то пропустил?
7 июн 13, 09:58    [14404086]     Ответить | Цитировать Сообщить модератору
 Re: Заполнение столбца значениями их хранимой процедуры  [new]
baracs
Member

Откуда: Москва
Сообщений: 7217
palich12
Именно процедуры, а не функции.
<...>
Процедура имеет примерно следующий вид:
sb_DoWork(@result)
Это, как раз, похоже на вызов функции...
palich12
Насколько я понимаю единственный способ сделать это, это написать триггер insted of? но как именить поочередно значение столбца в каждой записи таблицы inserted перед вставкой в таблицу.
В триггре AFTER можно проапдейтить значения столбца прямо в таблице...

Почему бы не вызвать эту sb_DoWork из процедуры, выполняющей вставку?
7 июн 13, 10:05    [14404133]     Ответить | Цитировать Сообщить модератору
 Re: Заполнение столбца значениями их хранимой процедуры  [new]
palich12
Member

Откуда:
Сообщений: 359
baracs,
можно и в процедуре, но сути это не меняет. есть таблица строк, которые нужно вставить и для каждой строки последовательно нужно вызвать процедуру, как это сделать?
7 июн 13, 10:32    [14404333]     Ответить | Цитировать Сообщить модератору
 Re: Заполнение столбца значениями их хранимой процедуры  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31983
palich12
baracs,
можно и в процедуре, но сути это не меняет. есть таблица строк, которые нужно вставить и для каждой строки последовательно нужно вызвать процедуру, как это сделать?
Цикл по строкам и вызов внутри цикла
7 июн 13, 10:44    [14404429]     Ответить | Цитировать Сообщить модератору
 Re: Заполнение столбца значениями их хранимой процедуры  [new]
baracs
Member

Откуда: Москва
Сообщений: 7217
alexeyvg
palich12
baracs,
можно и в процедуре, но сути это не меняет. есть таблица строк, которые нужно вставить и для каждой строки последовательно нужно вызвать процедуру, как это сделать?
Цикл по строкам и вызов внутри цикла
+1
7 июн 13, 10:49    [14404478]     Ответить | Цитировать Сообщить модератору
 Re: Заполнение столбца значениями их хранимой процедуры  [new]
palich12
Member

Откуда:
Сообщений: 359
baracs,
да я это понимаю, но можно какой-нибудь простой пример, как реализовать такой цикл, а то ничего не могу найти, либо что-то уже совсем монструозное
7 июн 13, 10:52    [14404509]     Ответить | Цитировать Сообщить модератору
 Re: Заполнение столбца значениями их хранимой процедуры  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Автор, а вам сделать функцию с аналогичным процедуре функционалом религия не позволяет?

А затем
 UPDATE Table SET 
   [Field] = dbo.fn_DoWork([Field])
7 июн 13, 10:57    [14404558]     Ответить | Цитировать Сообщить модератору
 Re: Заполнение столбца значениями их хранимой процедуры  [new]
Гость333
Member

Откуда:
Сообщений: 3683
palich12
простой пример

Цикл по строкам sys.objects
declare @name sysname, @type_desc nvarchar(60);

declare cur cursor local fast_forward for
  select name, type_desc from sys.objects;

open cur;

fetch next from cur into @name, @type_desc;

while @@fetch_status = 0
begin
   print @type_desc + N': ' + @name;
   
   fetch next from cur into @name, @type_desc;
end;

close cur;

deallocate cur;
7 июн 13, 10:58    [14404569]     Ответить | Цитировать Сообщить модератору
 Re: Заполнение столбца значениями их хранимой процедуры  [new]
palich12
Member

Откуда:
Сообщений: 359
Гость333,
ок, спасибо
7 июн 13, 11:00    [14404591]     Ответить | Цитировать Сообщить модератору
 Re: Заполнение столбца значениями их хранимой процедуры  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Гость333

declare cur cursor local fast_forward
....

close cur;
deallocate cur;

[/quot]
:D:D:D
7 июн 13, 11:01    [14404592]     Ответить | Цитировать Сообщить модератору
 Re: Заполнение столбца значениями их хранимой процедуры  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Гость333
declare cur cursor local fast_forward for
...

close cur;

deallocate cur;




:D
7 июн 13, 11:02    [14404602]     Ответить | Цитировать Сообщить модератору
 Re: Заполнение столбца значениями их хранимой процедуры  [new]
baracs
Member

Откуда: Москва
Сообщений: 7217
palich12
baracs,
да я это понимаю, но можно какой-нибудь простой пример, как реализовать такой цикл, а то ничего не могу найти, либо что-то уже совсем монструозное
14404002
(DECLARE CURSOR, см. примеры).

WHILE (там есть пример без курсора).
7 июн 13, 11:09    [14404664]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить