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

Откуда:
Сообщений: 740
У меня есть процедура хранимая, которая импортирует записи из одной таблицы в другую

PROCEDURE [dbo].[Proc_Import] (@ID VARCHAR(50))

У меня вопрос - как в эту процедуру подать массив данных с которой процедура должна сработать.
Т.е. мне нужно чтобы процедура в качестве параметра получала ID из Table1.
ID
1
2
3
...

И эти самые ID обрабатывала поочереди. Т.е. некий импорт всех ID

я правильно делаю?

declare @Query  varchar(255),
@Query = 'SELECT Id From table1';
exec Proc_Import(exec(@Query));
31 авг 11, 18:07    [11208254]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры и передача в нее поочереди параметров  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
используйте тип данных XML
31 авг 11, 18:08    [11208263]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры и передача в нее поочереди параметров  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Ольга Семенова, можно табличную переменную использовать
31 авг 11, 18:09    [11208269]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры и передача в нее поочереди параметров  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
ну или можно склеивать ID-шники в строку перед передачей и потом распарсивать во временную таблицу.
31 авг 11, 18:09    [11208274]     Ответить | Цитировать Сообщить модератору
 Re: Составление запроса на сумму и проверка на уникальность  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 740
может в цикле как-то вызывать процедуру и передавать новый ID?
31 авг 11, 18:13    [11208310]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры и передача в нее поочереди параметров  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
Ольга Семенова,

не не, сами смотрите если записей 1000 то 1000 раз будет вызвана команда допустим insert или 1 раз но большим запросом.
не оптимально.
31 авг 11, 18:16    [11208337]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры и передача в нее поочереди параметров  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
Ольга Семенова
У меня есть процедура хранимая, которая импортирует записи из одной таблицы в другую

PROCEDURE [dbo].[Proc_Import] (@ID VARCHAR(50))

я правильно делаю?

declare @Query  varchar(255),
@Query = 'SELECT Id From table1';
exec Proc_Import(exec(@Query));


так неправильно.
если уже хотите так то выполняйте exec внутри своей процедуры и результат пихайте во врем. табл.
типа
declare @Query  varchar(255)
@Query = 'SELECT Id From table1'
exec Proc_Import(@Query)

а в процедуре
...
declare @t table ( id int )
insert @t
exec (@ID)
...
но это не лучший способ
31 авг 11, 18:20    [11208357]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры и передача в нее поочереди параметров  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
и если необходимо обрабатывать каждую запись поочереди в цикле обрабатывайте данные из таблицы @t

declare @id int

select top 1 @id = id from @t

while @@rowcount > 0
begin
--  ... обрабатываем @id

select top 1 @id = id from @t
end
31 авг 11, 18:23    [11208384]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры и передача в нее поочереди параметров  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
J.d,

ну соответственно там где обрабатываете текущий @id необходимо его удалять при завершении =)

delete from @t where id = @id
31 авг 11, 18:25    [11208396]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры и передача в нее поочереди параметров  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
Ольга Семенова,

На будущее (поскольку вопросов у вас еще будет много :) ) - каждый свой топик начинайте с напоминания версии вашего сервера. Это влияет на содержимое ответов не менее 90% задаваемых вопросов.
31 авг 11, 18:27    [11208421]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры и передача в нее поочереди параметров  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
да уж. когда это не озвучивают мне кажется что у человека та же версия на которой я работаю в настоящий момент)))
31 авг 11, 18:29    [11208440]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры и передача в нее поочереди параметров  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 740
J.d
и если необходимо обрабатывать каждую запись поочереди в цикле обрабатывайте данные из таблицы @t

declare @id int

select top 1 @id = id from @t

while @@rowcount > 0
begin
--  ... обрабатываем @id

select top 1 @id = id from @t
end


что-то я запуталась... а где вызов моей процедуры?
можно поочереди расписать алгоритм - а то в ваших вариантах я накуралесила. А сама процедура очень огромная. И в ее тело залазить не хочется. Мне вот вызвать ее нужно только

версия 2008 ентерпрайс
31 авг 11, 19:50    [11208865]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры и передача в нее поочереди параметров  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 740
вызываю для примера свою процедуру
PROCEDURE [dbo].[Proc_Import] (@ID VARCHAR(50))

так

DECLARE @RC int
DECLARE @ID varchar(50)
-- Задаю здесь значения параметров.
@ID='10-001'
EXECUTE @RC = [DB].[dbo].[Proc_Import]

выдается
Сообщение 102, уровень 15, состояние 1, строка 4
Incorrect syntax near '@ID'.

что-то не так перисвоила?
1 сен 11, 09:32    [11210096]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры и передача в нее поочереди параметров  [new]
Glory
Member

Откуда:
Сообщений: 104751
Ольга Семенова

что-то не так перисвоила?

Угадали
Сервер даже написал, в какой строке скрипта не так
1 сен 11, 09:42    [11210138]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры и передача в нее поочереди параметров  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 740
Glory
Ольга Семенова
что-то не так перисвоила?

Угадали
Сервер даже написал, в какой строке скрипта не так


и что не так? точку с запятой в конце строки нужно или что? или присвоение тут как в делфи с :=
1 сен 11, 09:45    [11210151]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры и передача в нее поочереди параметров  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
SET
1 сен 11, 09:46    [11210152]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры и передача в нее поочереди параметров  [new]
Glory
Member

Откуда:
Сообщений: 104751
Ольга Семенова
Glory
пропущено...

Угадали
Сервер даже написал, в какой строке скрипта не так


и что не так? точку с запятой в конце строки нужно или что? или присвоение тут как в делфи с :=

Хелп открыть. И прочитать про документированную команду присвоения. А не придумывать ее самой
1 сен 11, 09:47    [11210156]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры и передача в нее поочереди параметров  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
думаю это

Ольга Семенова
Т.е. мне нужно чтобы процедура в качестве параметра получала ID из Table1.


не получится
с учетом этого

Ольга Семенова
сама процедура очень огромная. И в ее тело залазить не хочется. Мне вот вызвать ее нужно только
версия 2008 ентерпрайс



а присвоение делается так

DECLARE @RC int
DECLARE @ID varchar(50)
SET @ID='10-001'
EXECUTE @RC = [DB].[dbo].[Proc_Import] @ID


а вообще неплохо было бы почитать хелп
1 сен 11, 10:17    [11210292]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры и передача в нее поочереди параметров  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
а вообще лучше оберните всё в другую версию

create proc [dbo].[Proc_Import];2
as
set nocount on

declare @t table ( id int not null )
declare @msg varchar(max)

insert into @t
select id from table1

declare @id int
select top 1 @id = id from @t

while @@rowcount >0
begin
begin try
exec [dbo].[Proc_Import] @id
end try
begin catch
select @msg = 'Внимание. Импорт для id = ' + cast( @id as varchar(32) ) + ' завершился с ошибкой: ' + ERROR_MESSAGE()
print @msg
end catch

delete from @t where id = @id
select top 1 @id = id from @t
end

go
1 сен 11, 10:24    [11210347]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры и передача в нее поочереди параметров  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
сорри я хотел сказать

create proc [dbo].[Proc_Import];2
as
set nocount on 

declare @t table ( id int not null )
declare @msg varchar(max)

insert into @t
select id from table1

declare @id int
select top 1 @id = id from @t

while @@rowcount >0
begin 
begin try
 exec [dbo].[Proc_Import] @id
 end try
 begin catch
 select @msg = 'Внимание. Импорт для id = ' + cast( @id as varchar(32) ) + ' завершился с ошибкой: ' + ERROR_MESSAGE() 
print @msg
 end catch

 delete from @t where id = @id
 select top 1 @id = id from @t
end

go 

=)
1 сен 11, 10:25    [11210349]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры и передача в нее поочереди параметров  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
ну че там? проканало? не зря я тут распинался?? )
1 сен 11, 10:45    [11210504]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры и передача в нее поочереди параметров  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 740
спс, так заработало

DECLARE @RC int
DECLARE @ID varchar(50)
-- Задаю здесь значения параметров.
Set @ID='10-001'
EXECUTE @RC = [DB].[dbo].[Proc_Import]
@ID

подскажите как теперь мне параметр ID вставлять - все поочереди, а не один который я вручную задала. Один за другим. Id беру из Table1
SELECT Id From table1
1 сен 11, 12:33    [11211588]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры и передача в нее поочереди параметров  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 740
J.d
ну че там? проканало? не зря я тут распинался?? )


сейчас попробую
1 сен 11, 12:39    [11211634]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры и передача в нее поочереди параметров  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 740
а что такое?

create proc [dbo].[Proc_Import];2
as
set nocount on 

это создание новой процедуры ? моя старая Proc_Import не затрется?
1 сен 11, 12:43    [11211665]     Ответить | Цитировать Сообщить модератору
 Re: Запуск процедуры и передача в нее поочереди параметров  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
это вторая версия.
первую не затрёт.
вызывать так.

exec [dbo].[Proc_Import];2 
1 сен 11, 13:02    [11211835]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить