2013-04-09 2 views
1

я процедура позволяет назвать это процедуратаблица Temp разделена между процедурами

caller 

, который создает временную таблицу

#temp1 

и EXEC другая процедура позволяет вызов, что

callee 

, которые вставляют некоторые значения в таблицу # temp1, чтобы она могла использоваться процедурой вызывающего абонента. Теперь проблема заключается в том, что моя процедура вызова может быть вызвана только через вызывающий или какую-либо другую процедуру, которая создает таблицу # temp1, а затем выполняет вызов. Есть ли способ, как введение «если» проверки состояния, если вызываемый абонент был вызван абонентом только тогда выполняет оператор

'insert #temp1 ....' 

и другие мудрым избежать.

Благодаря

ответ

1

Вы можете реализовать логику для того, чтобы знать, кто называется процедура «вызываемый» - добавить параметры в «вызываемый» с по умолчанию значения = NULL (например), а затем изменить только процедуру «вызывающего абонента» на добавив этот параметр со значением 1 (например). В процедуре «callee» проверьте значение этого параметра, и если оно отличается от NULL, тогда работайте со своей временной таблицей.

Пример кода:

create procedure [callee] 
(
@CalledByCaller bit = NULL 
) 
as 
set nocount on 
If @CalledByCaller =1 
begin 
    SELECT '3' 
    --work with temp table 
end 
SELECT '2' 
go 

create procedure [caller] 
as 
set nocount on 

exec [callee] @CalledByCaller =1 

go 
0

Если вызываемые всегда будет производить один набор результатов, и это то, что результирующий набор, который должен быть вставлен в #temp1, если его в наличии, то вы могли бы рассмотреть вопрос о смещении INSERT в внешняя процедура, с помощью INSERT ... EXEC внутри caller:

CREATE procedure caller 
as 
    --Various things 
    create table #temp1 (column1,column2) 
    --Other things 
    insert into #temp1 (column1,column2) exec callee 
    --Work with #temp1 
+0

Невозможно использовать вставки Exec, поскольку SQL не позволит мне иметь вложенные вставки Exec – LivingThing

+0

@LivingThing - есть временные решения для [этого] (http://blogs.technet.com/b/wardpond/archive/2005/08/01/408502.aspx), если это, по сути, то, что вы хотите сделать (вложенная вставка ... exec) –

Смежные вопросы