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

Откуда:
Сообщений: 15
В хранимую процедуру SelectEmployee приходит параметр в виде массива IDшников, есть ли относительно простой способ, чтобы не разбивать строку, не момещать данные во временную таблицу, в общем чтобы было поменьше гемороя

Есть ли примерно такая функция?
SELECT EmployeeName FROM Employee WHERE ID Among('123;456;7855',';')?
5 фев 13, 21:07    [13880552]     Ответить | Цитировать Сообщить модератору
 Re: Параметр в виде массива  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Table-Valued Parameters
5 фев 13, 21:35    [13880664]     Ответить | Цитировать Сообщить модератору
 Re: Параметр в виде массива  [new]
Bator
Member

Откуда: Порт пяти морей
Сообщений: 439
tercat
В хранимую процедуру SelectEmployee приходит параметр в виде массива IDшников, есть ли относительно простой способ, чтобы не разбивать строку, не момещать данные во временную таблицу, в общем чтобы было поменьше гемороя

Есть ли примерно такая функция?
SELECT EmployeeName FROM Employee WHERE ID Among('123;456;7855',';')?


А как предполагается использовать этот параметр, если не загружать во временную таблицу?
Относительно простой способ - убрать этот параметр и будет меньше геморроя (-:
6 фев 13, 13:02    [13883683]     Ответить | Цитировать Сообщить модератору
 Re: Параметр в виде массива  [new]
qwerty112
Guest
tercat
В хранимую процедуру SelectEmployee приходит параметр в виде массива IDшников, есть ли относительно простой способ, чтобы не разбивать строку, не момещать данные во временную таблицу, в общем чтобы было поменьше гемороя

Есть ли примерно такая функция?
SELECT EmployeeName FROM Employee WHERE ID Among('123;456;7855',';')?

xml передавай
или "на месте" преобразуй список в xml - времянка тогда не понадобится
6 фев 13, 13:08    [13883766]     Ответить | Цитировать Сообщить модератору
 Re: Параметр в виде массива  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
WHERE ';123;456;7855;' LIKE '%;'+CAST(ID AS VARCHAR)+';%'
6 фев 13, 13:43    [13884153]     Ответить | Цитировать Сообщить модератору
 Re: Параметр в виде массива  [new]
mike909
Member

Откуда:
Сообщений: 662
ALL,
+ А что, динамика уже не катит ?
GO
CREATE PROCEDURE dbo.TestList @ParamID nvarchar(max)
AS
BEGIN
	SET NOCOUNT ON;
	
	exec( 'select * from sys.objects where [object_id] in ( ' + @ParamID + ')' )
	
	RETURN 0
END
GO

declare @ParamID nvarchar(max)
select @ParamID = (
  SELECT top 10 CASE ROW_NUMBER() OVER(ORDER BY [object_id] DESC) WHEN 1 THEN '' ELSE ',' END + 
    cast([object_id] as nvarchar) as [text()]
  FROM sys.objects
  FOR XML PATH(''), TYPE
).value('(text())[1]','nvarchar(max)')
print @ParamID

exec dbo.TestList @ParamID 
6 фев 13, 13:48    [13884205]     Ответить | Цитировать Сообщить модератору
 Re: Параметр в виде массива  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
mike909
ALL,
+ А что, динамика уже не катит ?
GO
CREATE PROCEDURE dbo.TestList @ParamID nvarchar(max)
AS
BEGIN
	SET NOCOUNT ON;
	
	exec( 'select * from sys.objects where [object_id] in ( ' + @ParamID + ')' )
	
	RETURN 0
END
GO

declare @ParamID nvarchar(max)
select @ParamID = (
  SELECT top 10 CASE ROW_NUMBER() OVER(ORDER BY [object_id] DESC) WHEN 1 THEN '' ELSE ',' END + 
    cast([object_id] as nvarchar) as [text()]
  FROM sys.objects
  FOR XML PATH(''), TYPE
).value('(text())[1]','nvarchar(max)')
print @ParamID

exec dbo.TestList @ParamID 
Много чего катит:

Массивы и Списки в SQL Server
6 фев 13, 14:08    [13884444]     Ответить | Цитировать Сообщить модератору
 Re: Параметр в виде массива  [new]
rantu
Member

Откуда: Krasnodar->Moscow->Spb->Berlin->Boston
Сообщений: 40
pkarklin
Table-Valued Parameters


по моему то что нужно
6 фев 13, 17:07    [13886102]     Ответить | Цитировать Сообщить модератору
 Re: Параметр в виде массива  [new]
Crimean
Member

Откуда:
Сообщений: 13147
rantu
по моему то что нужно


пока у вас разных типов входных параметров будет не так много - да. а вот дальше есть риск скатиться в полное УГ
6 фев 13, 17:32    [13886282]     Ответить | Цитировать Сообщить модератору
 Re: Параметр в виде массива  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Crimean
пока у вас разных типов входных параметров будет не так много - да. а вот дальше есть риск скатиться в полное УГ


Ни чуть не большее УГ, чем захардкоженный разбор XML...
6 фев 13, 20:40    [13887174]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить