Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Create function(array like "in", dt)  [new]
НиколайСН
Member

Откуда:
Сообщений: 120
Товарищи и профи, салют!
Сталкнулся с интерестной задачкой:
Имеется функция типа (уже написаны):
1. Иерархические справочник Бизнес-единиц через сцепку Parent_key и Key
2. CREATE FUNCTION ParentsAndChildsBUs(@BUnit int, @curDate datetime)
RETURNS @BU TABLE ([key] int)

Но здесь у нас @BUnit имеет тип INT.
А у меня переменная @BUnit передается не как INT а как массив (не знаю как точно, типа IN)
одним словом на обычном запросе это работает как ... where BU in (@BUnit )

Вот и необходимо както (как? - я хз) вывернуться и написать такую функцию, где будет вместо single стоять Multi
22 июл 15, 16:56    [17922382]     Ответить | Цитировать Сообщить модератору
 Re: Create function(array like "in", dt)  [new]
Glory
Member

Откуда:
Сообщений: 104760
НиколайСН
а как массив (не знаю как точно,

в TSQL нет массивов
22 июл 15, 16:58    [17922390]     Ответить | Цитировать Сообщить модератору
 Re: Create function(array like "in", dt)  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
НиколайСН,

Можно передавать XML со списком и дальше в функции с ним резвиться.
Странно, вроде раньше в FAQ была тема про передачу списка значений?
22 июл 15, 17:03    [17922417]     Ответить | Цитировать Сообщить модератору
 Re: Create function(array like "in", dt)  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Кот Матроскин
НиколайСН,

Можно передавать XML со списком и дальше в функции с ним резвиться.
Странно, вроде раньше в FAQ была тема про передачу списка значений?
Эта статья?
Массивы и Списки в SQL Server
22 июл 15, 17:06    [17922432]     Ответить | Цитировать Сообщить модератору
 Re: Create function(array like "in", dt)  [new]
НиколайСН
Member

Откуда:
Сообщений: 120
Дело в том что я не могу оперировать типом передачи @BUnit
22 июл 15, 17:12    [17922464]     Ответить | Цитировать Сообщить модератору
 Re: Create function(array like "in", dt)  [new]
Glory
Member

Откуда:
Сообщений: 104760
НиколайСН
Дело в том что я не могу оперировать типом передачи @BUnit

Вплоть до того, что не можете даже узнать тип данных ?

Сообщение было отредактировано: 22 июл 15, 17:14
22 июл 15, 17:14    [17922473]     Ответить | Цитировать Сообщить модератору
 Re: Create function(array like "in", dt)  [new]
НиколайСН
Member

Откуда:
Сообщений: 120
Ребята, пока закрываем! Пока я сам не разберусь что за фигня!
Извините что потревожил до конца сам не разобравшись и не сформулировав что хотел.

еще раз извините.
22 июл 15, 17:15    [17922484]     Ответить | Цитировать Сообщить модератору
 Re: Create function(array like "in", dt)  [new]
НиколайСН
Member

Откуда:
Сообщений: 120
Вот!!!
Пока единичная выборка, запрос ниже
SELECT *  
from AllCreditorsForBUnit(1, GETDATE()) 


А необходимо чтобы отрабатывала функция
SELECT *  
from AllCreditorsForBUnit(1,2,3,4,5,6,7,8,9, GETDATE()) 


и это притом что количество может меняться!
22 июл 15, 17:19    [17922513]     Ответить | Цитировать Сообщить модератору
 Re: Create function(array like "in", dt)  [new]
НиколайСН
Member

Откуда:
Сообщений: 120
и это притом что я не могу поменять сам тип
1,2,3,4,5,6,7

Ну вот в таком формате передаётся мне параметр с платформы который я никак не могу перехватить и преобразовать.
22 июл 15, 17:22    [17922532]     Ответить | Цитировать Сообщить модератору
 Re: Create function(array like "in", dt)  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
НиколайСН,

версию сервера даже не назвали.
Если SQL2008 или новее, то передавать заполненную табличную переменную.
Или тип XML (уже советовали).
Или статью по ссылке прочитать.
22 июл 15, 17:23    [17922544]     Ответить | Цитировать Сообщить модератору
 Re: Create function(array like "in", dt)  [new]
Glory
Member

Откуда:
Сообщений: 104760
НиколайСН
А необходимо чтобы отрабатывала функция

Т.е. чтобы волшебных образом у функции менялось число параметров ?
22 июл 15, 17:24    [17922549]     Ответить | Цитировать Сообщить модератору
 Re: Create function(array like "in", dt)  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
НиколайСН
я не могу поменять сам тип
КАКОЙ ТИП??
Может, ответите когда-нибудь?
22 июл 15, 17:24    [17922550]     Ответить | Цитировать Сообщить модератору
 Re: Create function(array like "in", dt)  [new]
xenix
Guest
На горизонте виднеется курсор по передаваемым значениям
22 июл 15, 17:24    [17922553]     Ответить | Цитировать Сообщить модератору
 Re: Create function(array like "in", dt)  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
НиколайСН
Дело в том что я не могу оперировать типом передачи @BUnit


это для SSRS, что ли? Cделайте оберточку
declare @XML xml

select @XML = (select ID from table where ID in ( @BUnit) for xml path )


select *
from ParentsAndChildsBUs (@XML)
22 июл 15, 17:24    [17922555]     Ответить | Цитировать Сообщить модератору
 Re: Create function(array like "in", dt)  [new]
НиколайСН
Member

Откуда:
Сообщений: 120
iap,
тип INT я не могу его например взять и передать в VARCHAR
22 июл 15, 17:35    [17922606]     Ответить | Цитировать Сообщить модератору
 Re: Create function(array like "in", dt)  [new]
НиколайСН
Member

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

MS SQL Server - 12-ый
22 июл 15, 17:36    [17922612]     Ответить | Цитировать Сообщить модератору
 Re: Create function(array like "in", dt)  [new]
НиколайСН
Member

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

Всё верно, чтобы менялось количество!
22 июл 15, 17:36    [17922617]     Ответить | Цитировать Сообщить модератору
 Re: Create function(array like "in", dt)  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
НиколайСН
iap,

MS SQL Server - 12-ый
Если тип параметра int и не подлежит изменению, то всё равно.
Собственно говоря, непонятно, что же Вы в таком случае хотите-то?
22 июл 15, 17:37    [17922622]     Ответить | Цитировать Сообщить модератору
 Re: Create function(array like "in", dt)  [new]
НиколайСН
Member

Откуда:
Сообщений: 120
Кот Матроскин,

Вот про оберточку это гуд!
т.к. это запрос, то я могу взять её перехватить эту переменную (в самом запросе), в обертку её, а там уже дописать функцию где с неё буду делать всё что захочу, вроде хорошая идея
22 июл 15, 17:38    [17922627]     Ответить | Цитировать Сообщить модератору
 Re: Create function(array like "in", dt)  [new]
НиколайСН
Member

Откуда:
Сообщений: 120
У меня 2 таблицы: Кредиторы и Юрики!

Связи между ними М к М

При выборе в платформе одного Юрика, я вижу кому он должен, а при выборе 2-N банков - выдаёт ошибку, из-за того что переполнение параметров функции!

Я могу только ловить либо "1" либо "1,2,3,4,5...." c типом данных INT
22 июл 15, 17:41    [17922646]     Ответить | Цитировать Сообщить модератору
 Re: Create function(array like "in", dt)  [new]
НиколайСН
Member

Откуда:
Сообщений: 120
Собственно я могу сделать всё что хочу с этим параметром @BUnit я могу перехватить и запихнуть в любую функцию т.вида, запрос, представление.
но на входе я ХЗ что может придти в переменной: или "1" или "2,5,8,23,75.."
22 июл 15, 17:44    [17922660]     Ответить | Цитировать Сообщить модератору
 Re: Create function(array like "in", dt)  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
НиколайСН
и это притом что я не могу поменять сам тип
1,2,3,4,5,6,7

Ну вот в таком формате передаётся мне параметр с платформы который я никак не могу перехватить и преобразовать.


Это строка?
22 июл 15, 17:48    [17922675]     Ответить | Цитировать Сообщить модератору
 Re: Create function(array like "in", dt)  [new]
Glory
Member

Откуда:
Сообщений: 104760
НиколайСН
я могу сделать всё что хочу с этим параметром @BUnit

НиколайСН
тип INT я не могу его например взять и передать в VARCHAR
22 июл 15, 17:48    [17922677]     Ответить | Цитировать Сообщить модератору
 Re: Create function(array like "in", dt)  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
Владислав Колосов
НиколайСН
и это притом что я не могу поменять сам тип
1,2,3,4,5,6,7

Ну вот в таком формате передаётся мне параметр с платформы который я никак не могу перехватить и преобразовать.


Это строка?


Судя по всему я понял ТС-а - такую же штуку делает SSRS. Там есть параметры, которые могут принимать несколько значений, и в запросе так и пишешь
select *
from Table
where ID in (@Param)
и при подстановке значений параметра SSRS разворачивает запрос в
Select *
from table
where ID in (1, 3, 8)
, как будто там и не было никогда переменной.
22 июл 15, 17:54    [17922699]     Ответить | Цитировать Сообщить модератору
 Re: Create function(array like "in", dt)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
НиколайСН
но на входе я ХЗ что может придти в переменной: или "1" или "2,5,8,23,75.."
Ну, то есть переменная всё таки одна? И вызов получается
SELECT *  
from AllCreditorsForBUnit(одна переменная, другая переменная) 
?
Вот теперь посмотрите, какого типа переменная, в которой приходит
НиколайСН
или "1" или "2,5,8,23,75.."
22 июл 15, 17:58    [17922711]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить