Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Табличная переменная в виде параметра / 15 сообщений из 15, страница 1 из 1
12.02.2010, 12:34
    #36465481
MorAdan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табличная переменная в виде параметра
Есть процедурка внутри нее обявляеться переменная аля
Код: plaintext
Declare @t table (id int,val float)
По ходу процедуры он заполняеться кучей данных. Можно ли потом эту переменную передать в другую процедуру или функцию, но так чтоб они могли в ней что то изменять и возвращать обратно в первую измененные данные.
Пытался сделать через UDT и передать в процедуру, но ругается что параметр должен быть Обязательно ReadOnly.
Какие есть варианты реализации данного алгоритма?
...
Рейтинг: 0 / 0
12.02.2010, 12:35
    #36465486
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табличная переменная в виде параметра
Сделать из переменной временную таблицу, тогда она отлично будет видна во всех вызываемых процедурах.
...
Рейтинг: 0 / 0
12.02.2010, 12:38
    #36465497
MorAdan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табличная переменная в виде параметра
А если из под одной сессии будет запускаться процедура в нескольких потоках(просто предположение) то эта временная таблица будет видна всем потокам в пределах этой транзакции?
...
Рейтинг: 0 / 0
12.02.2010, 13:03
    #36465594
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табличная переменная в виде параметра
авторизменять и возвращать обратно в первую измененные данные.

C табличными параметрами такой фокус не пройдет.
...
Рейтинг: 0 / 0
12.02.2010, 13:05
    #36465598
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табличная переменная в виде параметра
MorAdanА если из под одной сессии будет запускаться процедура в нескольких потоках(просто предположение) то эта временная таблица будет видна всем потокам в пределах этой транзакции?

У одной сесси на стороне сервера не может быть несколько потоков (не путать с распараллеливанием). Но временная таблица, созданная в хп, будет видна во всех хп, вызываемых из нее (включая вложенные).
...
Рейтинг: 0 / 0
12.02.2010, 14:13
    #36465868
vlas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табличная переменная в виде параметра
Тип данных параметра (возможно, с указанием схемы, которой он принадлежит). Для функций Transact-SQL допустимы любые типы данных, включая определяемые пользователем типы данных CLR и определяемые пользователем табличные типы, за исключением типа данных timestamp. Для функций CLR допустимы все типы данных, включая пользовательские типы данных CLR, за исключением типов данных text, ntext, image, определяемых пользователем табличных типов и типов данных timestamp. Нескалярные типы cursor и table не могут быть указаны в качестве типов данных параметров ни для функций Transact-SQL, ни для функций CLR.
BOL


SQL SERVER без границ
...
Рейтинг: 0 / 0
12.02.2010, 14:56
    #36466056
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табличная переменная в виде параметра
vlas,

Странно, стрелял Дантес речь идет о хп, а памятник Пушкину цитату Вы привели о CREATE FUNCTION.
...
Рейтинг: 0 / 0
13.02.2010, 10:53
    #36467337
vlas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табличная переменная в виде параметра
pkarklinvlas,

Странно, стрелял Дантес речь идет о хп, а памятник Пушкину цитату Вы привели о CREATE FUNCTION.

Если почитать MSDN по ссылке, то ясно, что табличная переменная не может быть параметром как функции так и хп
SQL SERVER без границ
...
Рейтинг: 0 / 0
13.02.2010, 10:55
    #36467338
vlas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табличная переменная в виде параметра
vlasНескалярные типы cursor и table не могут быть указаны в качестве типов данных параметров ни для функций Transact-SQL, ни для функций CLR.
BOL


SQL SERVER без границ
...
Рейтинг: 0 / 0
13.02.2010, 11:00
    #36467339
vlas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табличная переменная в виде параметра
vlaspkarklinvlas,

Странно, стрелял Дантес речь идет о хп, а памятник Пушкину цитату Вы привели о CREATE FUNCTION.

Если почитать MSDN по ссылке, то ясно, что табличная переменная не может быть параметром как функции так и хп
SQL SERVER без границ

Извините, обшибся.

В этой ссылке нет информации про хп.

А вот здесь есть:
BOL
data_type

Is the parameter data type. All data types, except the table data type, can be used as a parameter for a stored procedure. However, the cursor data type can be used only on OUTPUT parameters. When you specify a data type of cursor, the VARYING and OUTPUT keywords must also be specified.
CREATE PROCEDURE BOL
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
05.05.2012, 13:59
    #37783613
Алексей Cивоплясов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табличная переменная в виде параметра
vlas,

У меня недавно была такая задача.
Сервер MSSQL 2008. Можно использовать создаваемый табличный тип и передавать его как параметр.
Найдено клик .
...
Рейтинг: 0 / 0
05.05.2012, 17:39
    #37784048
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табличная переменная в виде параметра
Алексей Cивоплясовvlas,

У меня недавно была такая задача.
Сервер MSSQL 2008. Можно использовать создаваемый табличный тип и передавать его как параметр.
Найдено клик .Думаете, ТС не нашёл за 2 года решение???
...
Рейтинг: 0 / 0
11.05.2012, 10:35
    #37788903
Алексей Cивоплясов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табличная переменная в виде параметра
alexeyvg,

Думаю, информация пригодится тому, кто ее будет на форуме искать. И ответ положен в тему исходя из этих соображений.
Если Вы относитесь к группе администраторов либо модераторов форума, то думаю, следует тему "забанить" чтобы форум не переполнялся ответами с разрывом более года. Как думаете?
...
Рейтинг: 0 / 0
03.10.2012, 10:02
    #37981250
MyNiGoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табличная переменная в виде параметра
Алексей Cивоплясов, спасибо
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
11.06.2018, 22:51
    #39659551
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Табличная переменная в виде параметра
Алексей Cивоплясовvlas,
Сервер MSSQL 2008. Можно использовать создаваемый табличный тип и передавать его как параметр.

Но только READONLY. Однако, вернуть табличку может табличная функция.

Итого пробуем:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
IF OBJECT_ID (N'dbo.MyFuncTest', N'TF') IS NOT NULL
	DROP FUNCTION dbo.MyFuncTest
GO
IF TYPE_ID(N'MyTestTableType') IS NOT NULL
	DROP TYPE MyTestTableType
GO
CREATE TYPE MyTestTableType AS TABLE (Id int, [Text] varchar(255))
GO
CREATE FUNCTION dbo.MyFuncTest (@MyInTable MyTestTableType READONLY)
	RETURNS @ret TABLE (Id int, [Text] varchar(255))
AS
BEGIN
	INSERT INTO @ret (Id, [Text]) SELECT Id+3, [Text] = 'old id = ' + CAST(id AS varchar) FROM @MyInTable
	RETURN
END
GO

DECLARE @MyTest AS MyTestTableType

INSERT  INTO @MyTest
		(Id, [Text])
	VALUES (1759, 'id = 1759'),
		(1760, 'id = 1760'),
		(1761, 'id = 1761');

INSERT INTO @MyTest 
	SELECT * FROM dbo.MyFuncTest(@MyTest)

SELECT * FROM @MyTest
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Табличная переменная в виде параметра / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]