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

Откуда:
Сообщений: 40
Здравия всем. Подскажите, такая проблема. Создаем хранимку:
Create PROCEDURE [dbo].[dtest]
AS
BEGIN
	SET NOCOUNT ON;
	
	Declare @OQvar varchar(max),
		@SelectVar varchar(max),
		@ServerName varchar(255),
		@String varchar(max)
		
	if object_id('tempdb..#tmp1')is not null drop table #tmp1
	Create table #tmp1 (Id int)
	
	Set @ServerName = '[ServerName1]'
	
	Set @SelectVar = 'Select 1 union all Select 2'
	Set @OQvar = 'Set DateFirst 1 Select * from openquery('+@ServerName+','''+@SelectVar+''')'
	
	insert into #tmp1
	exec (@OQvar)
	
	select * from #tmp1
		
END


Далее делаю так:
exec dbo.dtest

говорит ОК

Хочу сделать так:
if object_id('tempdb..#tmp')is not null drop table #tmp
	Create table #tmp (Clientid int)

insert into #tmp
exec DailyStats.dbo.dtest

Говорит нельзя так. Вопрос: как быть?
P.S. знаю что 100500 раз обсуждалась тема с вызовом процедуры из процедуры, но вот так у меня сделать не получилось.
Заранее спасибо
21 ноя 13, 14:31    [15168426]     Ответить | Цитировать Сообщить модератору
 Re: Вызов процедуры из процедуры + Liknked Server  [new]
Glory
Member

Откуда:
Сообщений: 104760
Mashtar
Говорит нельзя так. Вопрос: как быть?

Убирать вложенные insert exec
21 ноя 13, 14:32    [15168440]     Ответить | Цитировать Сообщить модератору
 Re: Вызов процедуры из процедуры + Liknked Server  [new]
Mashtar
Member

Откуда:
Сообщений: 40
Glory, спасибо за совет, но принцип работы процедуры должен остаться прежним. Может кто-то еще поделится знаниями?
21 ноя 13, 15:07    [15168799]     Ответить | Цитировать Сообщить модератору
 Re: Вызов процедуры из процедуры + Liknked Server  [new]
Glory
Member

Откуда:
Сообщений: 104760
Mashtar
но принцип работы процедуры должен остаться прежним

В чем сакральный смысл вложенных insert-exec-ов ?

Mashtar
Может кто-то еще поделится знаниями?

С таким подходом вы слона не продадите задачу не решите
21 ноя 13, 15:10    [15168829]     Ответить | Цитировать Сообщить модератору
 Re: Вызов процедуры из процедуры + Liknked Server  [new]
Mashtar
Member

Откуда:
Сообщений: 40
Glory, а как иначе мне дальше в теле процедуры манипулировать действиями exec(@OQvar)??? Допустим полученный массив данных я хочу потом соединить еще с таблицей и т.д.???
21 ноя 13, 15:12    [15168856]     Ответить | Цитировать Сообщить модератору
 Re: Вызов процедуры из процедуры + Liknked Server  [new]
Glory
Member

Откуда:
Сообщений: 104760
Mashtar
а как иначе мне дальше в теле процедуры манипулировать действиями exec(@OQvar)??? Допустим полученный массив данных я хочу потом соединить еще с таблицей и т.д.???

Зачем тогда временная таблица создается внутри процедуры ?
21 ноя 13, 15:13    [15168866]     Ответить | Цитировать Сообщить модератору
 Re: Вызов процедуры из процедуры + Liknked Server  [new]
Mashtar
Member

Откуда:
Сообщений: 40
Glory, хмм ок попробую так: в процедуре я привел пример 1 openquery... а реальной процедуре их 5. Выгружаются они все во временные таблицы, далее между собой как-то соединяются и т.д.. Для этого и создаются в процедуре временные таблицы.
21 ноя 13, 15:16    [15168883]     Ответить | Цитировать Сообщить модератору
 Re: Вызов процедуры из процедуры + Liknked Server  [new]
Glory
Member

Откуда:
Сообщений: 104760
Mashtar
Выгружаются они все во временные таблицы, далее между собой как-то соединяются и т.д.. Для этого и создаются в процедуре временные таблицы.

Вы уж определитесь, где вы будет "полученный массив данных я хочу потом соединить еще с таблицей и т.д"
21 ноя 13, 15:19    [15168904]     Ответить | Цитировать Сообщить модератору
 Re: Вызов процедуры из процедуры + Liknked Server  [new]
Mashtar
Member

Откуда:
Сообщений: 40
Glory, что не понятно? В процедуре должны быть вставки во временные таблицы (процедура получает какой-то массив данных,особо хитрым образом).
В другом запросе мне нужно использовать результат это процедуры, поэтому результат процедуры мне тоже нужно во временную таблицу запихнуть.
Я так понимаю Вы не можете предложить решение как это сделать. Подождем других форумчан, возможно кто-то сталкивался с такой проблемой.
21 ноя 13, 15:23    [15168944]     Ответить | Цитировать Сообщить модератору
 Re: Вызов процедуры из процедуры + Liknked Server  [new]
Glory
Member

Откуда:
Сообщений: 104760
Mashtar
Glory, что не понятно?

Непонятно ваше желание использовать insert-exec везде

Mashtar
Я так понимаю Вы не можете предложить решение как это сделать.

Избежать ошибки вложенных insert-exec можно только, убрав вложенные insert-exec. Что непонятно ?
21 ноя 13, 15:29    [15168987]     Ответить | Цитировать Сообщить модератору
 Re: Вызов процедуры из процедуры + Liknked Server  [new]
Mashtar
Member

Откуда:
Сообщений: 40
Glory, я Вас понял. Может тогда подскажите, как вот отсюда
Declare @OQvar varchar(max),
		@SelectVar varchar(max),
		@ServerName varchar(255),
		@String varchar(max)
		
	if object_id('tempdb..#tmp1')is not null drop table #tmp1
		Create table #tmp1 (Id int)
	if object_id('tempdb..#tmp2')is not null drop table #tmp2
		Create table #tmp2 (Id int)
	
	Set @ServerName = '[ServerName1]'
	
	Set @SelectVar = 'Select 1 union all Select 2'
	Set @OQvar = 'Set DateFirst 1 Select * from openquery('+@ServerName+','''+@SelectVar+''')'
	
	insert into #tmp1
	exec (@OQvar)
	
	Set @ServerName = '[ServerName2]'
	
	Set @SelectVar = 'Select 1 union all Select 3'
	Set @OQvar = 'Set DateFirst 1 Select * from openquery('+@ServerName+','''+@SelectVar+''')'
	
	insert into #tmp1
	exec (@OQvar)
	
	select * 
	from #tmp1 t1
		join #tmp2 t2 on t1.Id = t2.Id

убрать insert-exec?
21 ноя 13, 15:46    [15169141]     Ответить | Цитировать Сообщить модератору
 Re: Вызов процедуры из процедуры + Liknked Server  [new]
Glory
Member

Откуда:
Сообщений: 104760
Mashtar
убрать insert-exec?

Руками убрать
21 ноя 13, 15:48    [15169161]     Ответить | Цитировать Сообщить модератору
 Re: Вызов процедуры из процедуры + Liknked Server  [new]
Mashtar
Member

Откуда:
Сообщений: 40
Glory, дерзите? :) Спасибо за ответ.
21 ноя 13, 15:49    [15169171]     Ответить | Цитировать Сообщить модератору
 Re: Вызов процедуры из процедуры + Liknked Server  [new]
Glory
Member

Откуда:
Сообщений: 104760
Mashtar
Glory, дерзите? :) Спасибо за ответ.

Какой вопрос - такой ответ

А какой ответ вы ждете на вопрос " как вот отсюда убрать insert-exec?"
Вы интересуетесь, какой программой редактировать скрипты ?
Или как в этой программе собственно работает редактирование - с клавиатуры или с мыши ?
Или это обращение за моральной поддержкой - ах, ну как же, как мне убрать этот код ?
21 ноя 13, 15:54    [15169224]     Ответить | Цитировать Сообщить модератору
 Re: Вызов процедуры из процедуры + Liknked Server  [new]
Mashtar
Member

Откуда:
Сообщений: 40
Glory, опять дерзите :) и все же может Вы сможете подсказать, как результат одного exec(@OQvar) соединить с другим результатом exec(@OQvar) без использования временных таблиц.
В данном случае имеется ввиду помощь, в виде конкретного примера, посредством языка запросов SQL. Заранее спасибо.
21 ноя 13, 15:59    [15169268]     Ответить | Цитировать Сообщить модератору
 Re: Вызов процедуры из процедуры + Liknked Server  [new]
Glory
Member

Откуда:
Сообщений: 104760
Mashtar
Вы сможете подсказать, как результат одного exec(@OQvar) соединить с другим результатом exec(@OQvar) без использования временных таблиц.

Учитесь читать.
Я не говорил, что это возможно.
Я говорил, что вложенные insert-exec невозможны.
И вам придется переписать свой код без вложенные insert-exec. А не без insert-exec вообще.
21 ноя 13, 16:01    [15169281]     Ответить | Цитировать Сообщить модератору
 Re: Вызов процедуры из процедуры + Liknked Server  [new]
Mashtar
Member

Откуда:
Сообщений: 40
Glory, а Вы так можете давать ответы на любой вопрос на форуме. Эдакий универсальный ответ.
Проблема остается актуальной, если кто-то знает решение кроме: исключить insert-exec и все это без примеров на sql, или идеи как это сделать - поделитесь :)

Mashtar
Здравия всем. Подскажите, такая проблема. Создаем хранимку:
Create PROCEDURE [dbo].[dtest]
AS
BEGIN
	SET NOCOUNT ON;
	
	Declare @OQvar varchar(max),
		@SelectVar varchar(max),
		@ServerName varchar(255),
		@String varchar(max)
		
	if object_id('tempdb..#tmp1')is not null drop table #tmp1
	Create table #tmp1 (Id int)
	
	Set @ServerName = '[ServerName1]'
	
	Set @SelectVar = 'Select 1 union all Select 2'
	Set @OQvar = 'Set DateFirst 1 Select * from openquery('+@ServerName+','''+@SelectVar+''')'
	
	insert into #tmp1
	exec (@OQvar)
	
	select * from #tmp1
		
END


Далее делаю так:
exec dbo.dtest

говорит ОК

Хочу сделать так:
if object_id('tempdb..#tmp')is not null drop table #tmp
	Create table #tmp (Clientid int)

insert into #tmp
exec DailyStats.dbo.dtest

Говорит нельзя так. Вопрос: как быть?
P.S. знаю что 100500 раз обсуждалась тема с вызовом процедуры из процедуры, но вот так у меня сделать не получилось.
Заранее спасибо
21 ноя 13, 16:08    [15169357]     Ответить | Цитировать Сообщить модератору
 Re: Вызов процедуры из процедуры + Liknked Server  [new]
Glory
Member

Откуда:
Сообщений: 104760
Mashtar
исключить insert-exec и все это без примеров на sql,

И этот человек говорит что-то про дерзить
Вы различаете словосочетания "вложенный insert-exec" и "insert-exec" ?
21 ноя 13, 16:11    [15169379]     Ответить | Цитировать Сообщить модератору
 Re: Вызов процедуры из процедуры + Liknked Server  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Mashtar,

Почему не хотите в процедуре вставлять данные сразу в #tmp?
21 ноя 13, 16:12    [15169397]     Ответить | Цитировать Сообщить модератору
 Re: Вызов процедуры из процедуры + Liknked Server  [new]
Mashtar
Member

Откуда:
Сообщений: 40
Гость333, что Вы имеете ввиду? Не делать в конце процедуры select * from #tmp1 а только вставить и select делать вне процедуры?
Попробовал - не работает. Или что-то другое?
21 ноя 13, 16:16    [15169441]     Ответить | Цитировать Сообщить модератору
 Re: Вызов процедуры из процедуры + Liknked Server  [new]
Mashtar
Member

Откуда:
Сообщений: 40
Гость333, сделал так. В процедуре вставил результирующие данные в ##Tmp. И потом после вызова этой процедуры могу обращаться к ##TMP. Круто. Только теперь нужно не забывать сносить такую таблицу. Другого решения нет?
21 ноя 13, 16:20    [15169475]     Ответить | Цитировать Сообщить модератору
 Re: Вызов процедуры из процедуры + Liknked Server  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Create PROCEDURE [dbo].[dtest]
AS
BEGIN
	BlaBla
	
	insert into #tmp
	exec (@OQvar)
END
GO

-- Вызов процедуры
if object_id('tempdb..#tmp')is not null drop table #tmp
	Create table #tmp (Clientid int)

exec DailyStats.dbo.dtest
21 ноя 13, 16:20    [15169478]     Ответить | Цитировать Сообщить модератору
 Re: Вызов процедуры из процедуры + Liknked Server  [new]
Glory
Member

Откуда:
Сообщений: 104760
Mashtar
Только теперь нужно не забывать сносить такую таблицу.

Вызов в двух коннектах сделает это за вас. В произвольное время с произвольным эффектом для другого коннекта.
21 ноя 13, 16:22    [15169490]     Ответить | Цитировать Сообщить модератору
 Re: Вызов процедуры из процедуры + Liknked Server  [new]
Mashtar
Member

Откуда:
Сообщений: 40
Гость333, метод, предложенный Вами работает только с глобальными таблицами (##tmp, например). Спасибо.

Glory, не подскажете как передать в процедуру название таблицы, в которую вставить данные?
21 ноя 13, 16:26    [15169523]     Ответить | Цитировать Сообщить модератору
 Re: Вызов процедуры из процедуры + Liknked Server  [new]
Glory
Member

Откуда:
Сообщений: 104760
Mashtar
метод, предложенный Вами работает только с глобальными таблицами (##tmp, например).

Вот на кой вы просите примеры кода, если вы даже не можете их применить ?
21 ноя 13, 16:28    [15169539]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить