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

Откуда:
Сообщений: 2695
Доброго дня господа !

Есть функция

create function [dbo].[MyFunction1](@Kind Integer)
returns table
as return select *
from T1
where F1 in (@Kind)

Необходимо передать массив параметров, @Kind = (1,2,3,4)
Результат функции должен быть эквивалентен запросу
select *
from T1
where F1 in(1,2,3,4)

Как правильно описать и как вызывать такую конструкцию ?

Заранее благодарен !
10 май 12, 11:08    [12528618]     Ответить | Цитировать Сообщить модератору
 Re: Передача массива параметров в таблицную функцию  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
http://msdn.microsoft.com/en-us/library/bb510489(v=SQL.105).aspx
10 май 12, 11:18    [12528693]     Ответить | Цитировать Сообщить модератору
 Re: Передача массива параметров в таблицную функцию  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
https://www.sql.ru/articles/mssql/03060701arraysandlistsinsqlserver.shtml
10 май 12, 11:19    [12528703]     Ответить | Цитировать Сообщить модератору
 Re: Передача массива параметров в таблицную функцию  [new]
HOME_X
Member

Откуда:
Сообщений: 2695
tpg
https://www.sql.ru/articles/mssql/03060701arraysandlistsinsqlserver.shtml


Принято !
Хорошая статья ...

P.S. - Microsoft малохо недоработал...
(а в MSQL2008 - MSQL2010 это случайно не реализовано ?)
10 май 12, 12:00    [12529000]     Ответить | Цитировать Сообщить модератору
 Re: Передача массива параметров в таблицную функцию  [new]
Рострига Артур
Member

Откуда:
Сообщений: 200
Сам боролся с такой проблемой...проще передать 3 переменных оказалось :)
10 май 12, 20:09    [12532571]     Ответить | Цитировать Сообщить модератору
 Re: Передача массива параметров в таблицную функцию  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
invm
http://msdn.microsoft.com/en-us/library/bb510489(v=SQL.105).aspx
Вас явно игнорируют.
А зря.
11 май 12, 00:25    [12533502]     Ответить | Цитировать Сообщить модератору
 Re: Передача массива параметров в таблицную функцию  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
HOME_X,
11403903
11 май 12, 10:24    [12534431]     Ответить | Цитировать Сообщить модератору
 Re: Передача массива параметров в таблицную функцию  [new]
мимо
Guest
declare @xml as xml = '<b>1</b><b>2</b><b>3</b>'

declare @t table (f1 int)
insert into @t values
(1),(2),(3),(4)

select *
from @t as t
	inner join (select x.value('.', 'int')
				from @xml.nodes('b') as y(x)) as y(x) on (y.x = t.f1)
11 май 12, 10:39    [12534543]     Ответить | Цитировать Сообщить модератору
 Re: Передача массива параметров в таблицную функцию  [new]
HOME_X
Member

Откуда:
Сообщений: 2695
Mnior
invm
http://msdn.microsoft.com/en-us/library/bb510489(v=SQL.105).aspx
Вас явно игнорируют.
А зря.


Да нет господа, я ознакомился, но как с Business Intelligence Development Studio
передать список парамтеров для заливки в тип ?

DECLARE @LocationTVP AS LocationTableType;

/* Add data to the table variable. */
INSERT INTO @LocationTVP (LocationName, CostRate)
SELECT Name, 0.00
FROM AdventureWorks2012.Person.StateProvince;
11 май 12, 11:00    [12534646]     Ответить | Цитировать Сообщить модератору
 Re: Передача массива параметров в таблицную функцию  [new]
HOME_X
Member

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

Исходя из вышепрочитанного остаеться одна возможность
это формирование длинной строки и ее дальнейший разбор
XML, циклом, или применение оператора LIKE
11 май 12, 11:03    [12534670]     Ответить | Цитировать Сообщить модератору
 Re: Передача массива параметров в таблицную функцию  [new]
HOME_X
Member

Откуда:
Сообщений: 2695
HOME_X
Да нет господа, я ознакомился, но как с Business Intelligence Development Studio
передать список парамтеров для заливки в тип ?


И как описать размерность типа, если она мне изначально неизвестна
(так как сколько опций выберит пользователь - загадка)

select T.*
from (values(@Param)) T(F1,F2,...........Fn)
11 май 12, 11:21    [12534836]     Ответить | Цитировать Сообщить модератору
 Re: Передача массива параметров в таблицную функцию  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
HOME_X, какя нафиг размерность?
IDTypeValue
11'1'
21'5'
31'10'
42'ABC'
42'DEF'
11 май 12, 12:11    [12535297]     Ответить | Цитировать Сообщить модератору
 Re: Передача массива параметров в таблицную функцию  [new]
HOME_X
Member

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

Пользуюсь софтом - по корпор. стандарту другого применить не могу !

Во экран. выдержки из него

Вопрос - как ДИНАМИЧЕСКИ описать пол. тип в который Вы хотели вносить данные

К сообщению приложен файл. Размер - 105Kb
11 май 12, 12:35    [12535505]     Ответить | Цитировать Сообщить модератору
 Re: Передача массива параметров в таблицную функцию  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Ссори, это вопос тем кто гордо пользуется Report Services.
11 май 12, 19:21    [12538758]     Ответить | Цитировать Сообщить модератору
 Re: Передача массива параметров в таблицную функцию  [new]
lapposv
Member

Откуда: Санкт-Петербург
Сообщений: 27
А вы trace запустите и посмотрите что репортер передаёт Вам при множественном выборе. Тогда будет понятно какой тип использовать в функции.
12 май 12, 16:09    [12543261]     Ответить | Цитировать Сообщить модератору
 Re: Передача массива параметров в таблицную функцию  [new]
HOME_X
Member

Откуда:
Сообщений: 2695
Mnior
Ссори, это вопос тем кто гордо пользуется Report Services.


Да понимаю ... и с вожделением несу свою КОРПОРАТИВНУЮ гордость
14 май 12, 12:18    [12549050]     Ответить | Цитировать Сообщить модератору
 Re: Передача массива параметров в таблицную функцию  [new]
HOME_X
Member

Откуда:
Сообщений: 2695
lapposv
А вы trace запустите и посмотрите что репортер передаёт Вам при множественном выборе. Тогда будет понятно какой тип использовать в функции.


Ситуация следующая - передача массива происходит красиво, если под него ВЫДЕЛЕНЫ ячейки памяти
Т.е.
create function [dbo].[MakeList1](@P1 varchar(15),@P2 varchar(15),@P3 varchar(15),@P4 varchar(15)) returns @Make table (LIST Int) as
begin
  if(@P1<>'')insert into @Make values(Cast(@P1 as Int))
  if(@P2<>'')insert into @Make values(Cast(@P2 as Int))
  if(@P3<>'')insert into @Make values(Cast(@P3 as Int))
  if(@P4<>'')insert into @Make values(Cast(@P4 as Int))
  return
end


Запрос в BIDS
select Coalesce(@LIND) as F1,A.LIST from dbo.MakeList1(@KIND) A

где @KIND = Split("1,4,5,6")
@LIND = Split("1,2,3,4,....n")

Отсюда вопрос - а можно ли создать функцию аналогичную Coalesce
14 май 12, 12:35    [12549179]     Ответить | Цитировать Сообщить модератору
 Re: Передача массива параметров в таблицную функцию  [new]
HOME_X
Member

Откуда:
Сообщений: 2695
[quot HOME_X
Отсюда вопрос - а можно ли создать функцию аналогичную Coalesce
[/quot]

К сообщению приложен файл. Размер - 7Kb
14 май 12, 12:36    [12549187]     Ответить | Цитировать Сообщить модератору
 Re: Передача массива параметров в таблицную функцию  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
HOME_X
Да понимаю ... и с вожделением несу свою КОРПОРАТИВНУЮ гордость
Но не во всякой "корпорации" занимаются мышко-дрочеством, особенно пытаясь засунуть кубик в круглое отверстие. Обходятся и без этого тазика костылей комбайна.
14 май 12, 21:59    [12553378]     Ответить | Цитировать Сообщить модератору
 Re: Передача массива параметров в таблицную функцию  [new]
HOME_X
Member

Откуда:
Сообщений: 2695
Mnior
....кубик в круглое отверстие...


Содержательно и по сути - но изменить ситуацию не могу !

На данный вопрос ответ получить - создать функцию аналогичную Coalesce
15 май 12, 10:41    [12554539]     Ответить | Цитировать Сообщить модератору
 Re: Передача массива параметров в таблицную функцию  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
HOME_X
создать функцию аналогичную Coalesce
Блин. Да нельзя сделать. Обычно это могут только спецально встрокнные функции, это плюшка среды разработки. И всякий язык такое поддерживает.
Но главное, нафиг не нужно.

Уверен, что можно нормально запилить табличные переменные, но разжёвывать я лично не буду. Ссори.
15 май 12, 15:38    [12557609]     Ответить | Цитировать Сообщить модератору
 Re: Передача массива параметров в таблицную функцию  [new]
HOME_X
Member

Откуда:
Сообщений: 2695
Mnior

но разжёвывать я лично не буду


Текстом я тоже умею ....

Спасибо за диалог !
15 май 12, 16:10    [12557974]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить