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

Откуда:
Сообщений: 26
Здравствуйте,
У меня есть рабочий вариант по указанному id:
DECLARE @top VARCHAR(100) = '2790c79a-8f2f-4d03-bee4-369e3ad80509'
DECLARE @adr VARCHAR(500) = ''    
WHILE @top != ''  
BEGIN       
SELECT @adr = shortname + '. ' + formalname + ', ' + @adr, @top = parentguid FROM [FIAS].[dbo].[fias_ADDROBJ] WHERE aoguid = @top         
print @top + '/' + @adr  
END    
 SELECT left(@adr, len(@adr)-1)

Мне необходим что бы запрос выдал не одну запись по одному id, а несколько записей по нескольким id

Я забил в массив n-ое кол-во id:
Declare @tbl table (RowId int identity(1,1), Itemaoid varchar(100), Itemformalname varchar(100))
Insert @tbl Select aoid, formalname FROM [FIAS].[dbo].[fias_ADDROBJ]  WHERE formalname like '%мо%' 


Не могу понять как выполнить запрос по всем имеющимся совпадениям aoguid с id в массиве из таблицы [FIAS].[dbo].[fias_ADDROBJ] получив при этом те же поля(SELECT @adr = shortname + '. ' + formalname + ', ' + @adr, @top = parentguid)

Проще говоря не по одному id а по массиву id-шников получить список (SELECT @adr)
29 май 15, 16:25    [17707553]     Ответить | Цитировать Сообщить модератору
 Re: Как в функцию передать массив и построить запрос?  [new]
Glory
Member

Откуда:
Сообщений: 104751
AxOn
Проще говоря не по одному id а по массиву id-шников получить список (SELECT @adr)

Опишите задачу, а не выбранный вами способ ее решения
29 май 15, 16:34    [17707597]     Ответить | Цитировать Сообщить модератору
 Re: Как в функцию передать массив и построить запрос?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8807
AxOn, похоже, Вы что-то делаете не то и не так. TSQL не работает с массивами, циклами подобно Oracle. От работает с запросами и только.
29 май 15, 16:37    [17707608]     Ответить | Цитировать Сообщить модератору
 Re: Как в функцию передать массив и построить запрос?  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Хоть идея и не сильно кошерная, но почитайте про курсоры. Как никак их и придумали для итерационной обработки данных.
29 май 15, 16:43    [17707631]     Ответить | Цитировать Сообщить модератору
 Re: Как в функцию передать массив и построить запрос?  [new]
AxOn
Member

Откуда:
Сообщений: 26
По каждому aoid массива @tbl необходимо получить строку состоящую из полей shortname + '. ' + formalname + ', ' + @adr из таблицы [FIAS].[dbo].[fias_ADDROBJ]
29 май 15, 16:46    [17707658]     Ответить | Цитировать Сообщить модератору
 Re: Как в функцию передать массив и построить запрос?  [new]
Glory
Member

Откуда:
Сообщений: 104751
AxOn
По каждому aoid массива @tbl необходимо получить строку состоящую из полей shortname + '. ' + formalname + ', ' + @adr из таблицы [FIAS].[dbo].[fias_ADDROBJ]

Эта задача решается обыкновенным join-ом
29 май 15, 16:48    [17707669]     Ответить | Цитировать Сообщить модератору
 Re: Как в функцию передать массив и построить запрос?  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21242
AxOn
Я забил в массив n-ое кол-во id:
Declare @tbl table (RowId int identity(1,1), Itemaoid varchar(100), Itemformalname varchar(100))
Insert @tbl Select aoid, formalname FROM [FIAS].[dbo].[fias_ADDROBJ]  WHERE formalname like '%мо%' 

Поскольку набор записей детерминирован, эта ежуточная таблица с выборкой нахрен не нужна.
29 май 15, 17:05    [17707797]     Ответить | Цитировать Сообщить модератору
 Re: Как в функцию передать массив и построить запрос?  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21242
*промежуточная таблица
29 май 15, 17:05    [17707798]     Ответить | Цитировать Сообщить модератору
 Re: Как в функцию передать массив и построить запрос?  [new]
AxOn
Member

Откуда:
Сообщений: 26
Я пытался так
Declare @adr table (RowId int identity(1,1), aRshortname varchar(100))
Insert @adr Select aRshortname = shortname + '. ' + formalname FROM [FIAS].[dbo].[fias_ADDROBJ] WHERE formalname like '%мо%'
SELECT aRshortname FROM @adr


eeeeerrrror
Msg 8152, Level 16, State 14, Line 2
String or binary data would be truncated.
The statement has been terminated.

(0 row(s) affected)
29 май 15, 17:17    [17707853]     Ответить | Цитировать Сообщить модератору
 Re: Как в функцию передать массив и построить запрос?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8807
Сотни мало.
29 май 15, 17:20    [17707863]     Ответить | Цитировать Сообщить модератору
 Re: Как в функцию передать массив и построить запрос?  [new]
AxOn
Member

Откуда:
Сообщений: 26
И так всеровно что-то не то выводит = '(
DECLARE @adr VARCHAR(max) = ''
Declare @tbl table (RowId int identity(1,1), aRaoid varchar(max), aRshortname varchar(max), aRformalname varchar(max) , aRparentguid varchar(max))
Insert @tbl Select aoid, shortname, formalname, parentguid FROM [FIAS].[dbo].[fias_ADDROBJ]  WHERE formalname like '%моск%' 

SELECT aRshortname + '. ' + aRformalname + ', ' + @adr, aRparentguid = parentguid FROM @tbl 
	INNER JOIN
	[FIAS].[dbo].[fias_ADDROBJ] ON  aRaoid = parentguid
29 май 15, 17:48    [17707992]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить