Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 User Defined Table Type & ReadOnly  [new]
UDT00001
Guest
Коллеги, подскажите пожалуйста, возможно ли каким-то образом менять строки в пользовательской табличной переменной, которая была объявлена в другой процедуре.

Знаю, что можно создать функцию, например:
http://stackoverflow.com/questions/2501324/can-t-sql-function-return-user-defined-table-type
http://stackoverflow.com/questions/12600496/how-to-make-a-function-that-take-user-defined-table-type-as-parameter-and-return

Можно ли каким-то образом сделать это в процедуре и передать значение этих изменений в вызывающую процедуру?
5 окт 15, 10:52    [18234994]     Ответить | Цитировать Сообщить модератору
 Re: User Defined Table Type & ReadOnly  [new]
Glory
Member

Откуда:
Сообщений: 104751
UDT00001
возможно ли каким-то образом менять строки в пользовательской табличной переменной, которая была объявлена в другой процедуре.

Локальные переменные потому и называются локальными, потому что доступны только в том пакете, где они были объявлены
5 окт 15, 10:59    [18235076]     Ответить | Цитировать Сообщить модератору
 Re: User Defined Table Type & ReadOnly  [new]
Glory
Member

Откуда:
Сообщений: 104751
UDT00001
Можно ли каким-то образом сделать это в процедуре и передать значение этих изменений в вызывающую процедуру?

Так изменить локальную перменную или передать ее _значение_ ?

Сообщение было отредактировано: 5 окт 15, 10:59
5 окт 15, 10:59    [18235081]     Ответить | Цитировать Сообщить модератору
 Re: User Defined Table Type & ReadOnly  [new]
UDT00001
Guest
Glory,

изменить, вот пример:

CREATE TYPE [dbo].[MyType] AS TABLE(
	[id] [int] NULL
)
GO


create FUNCTION RetMyType
(
    @in MyType READONLY
)
RETURNS @ReturnTable table(
id int
)
AS
begin

insert into @ReturnTable(id)
select i.id from @in i
where id > 10


update rt
set 
	id = -id
from @ReturnTable rt
where rt.id > 100

RETURN 

end




create procedure dbo.FirstProc
as
begin
declare @t MyType
		,@t2 MyType

insert into @t(id)
select object_id from sys.objects 


select * from @t


insert into @t2(id)
select * from RetMyType(@t)

select * from @t2 t

return 0
end
go




exec dbo.FirstProc
5 окт 15, 11:10    [18235174]     Ответить | Цитировать Сообщить модератору
 Re: User Defined Table Type & ReadOnly  [new]
Glory
Member

Откуда:
Сообщений: 104751
UDT00001
изменить, вот пример:

Изменить чужую локальную переменную вы не можете.
5 окт 15, 11:15    [18235202]     Ответить | Цитировать Сообщить модератору
 Re: User Defined Table Type & ReadOnly  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
UDT00001
Glory,

изменить, вот пример:

CREATE TYPE [dbo].[MyType] AS TABLE(
	[id] [int] NULL
)
GO


create FUNCTION RetMyType
(
    @in MyType READONLY
)
RETURNS @ReturnTable table(
id int
)
AS
begin

insert into @ReturnTable(id)
select i.id from @in i
where id > 10


update rt
set 
	id = -id
from @ReturnTable rt
where rt.id > 100

RETURN 

end




create procedure dbo.FirstProc
as
begin
declare @t MyType
		,@t2 MyType

insert into @t(id)
select object_id from sys.objects 


select * from @t


insert into @t2(id)
select * from RetMyType(@t)

select * from @t2 t

return 0
end
go




exec dbo.FirstProc
А что не работает?
5 окт 15, 11:50    [18235472]     Ответить | Цитировать Сообщить модератору
 Re: User Defined Table Type & ReadOnly  [new]
UDT00001
Guest
iap,

Все работает.
Хочется более изящный способ найти - без переприсвоения, с процедурой и без функции
5 окт 15, 12:18    [18235658]     Ответить | Цитировать Сообщить модератору
 Re: User Defined Table Type & ReadOnly  [new]
Glory
Member

Откуда:
Сообщений: 104751
UDT00001
Хочется более изящный способ найти - без переприсвоения, с процедурой и без функции

используйте постоянные таблицы
5 окт 15, 12:20    [18235669]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить