Параметр в виде массива

tercat
Дата: 05.02.2013 21:07:09
В хранимую процедуру SelectEmployee приходит параметр в виде массива IDшников, есть ли относительно простой способ, чтобы не разбивать строку, не момещать данные во временную таблицу, в общем чтобы было поменьше гемороя

Есть ли примерно такая функция?
SELECT EmployeeName FROM Employee WHERE ID Among('123;456;7855',';')?
pkarklin
Дата: 05.02.2013 21:35:42
Bator
Дата: 06.02.2013 13:02:44
tercat
В хранимую процедуру SelectEmployee приходит параметр в виде массива IDшников, есть ли относительно простой способ, чтобы не разбивать строку, не момещать данные во временную таблицу, в общем чтобы было поменьше гемороя

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


А как предполагается использовать этот параметр, если не загружать во временную таблицу?
Относительно простой способ - убрать этот параметр и будет меньше геморроя (-:
qwerty112
Дата: 06.02.2013 13:08:48
tercat
В хранимую процедуру SelectEmployee приходит параметр в виде массива IDшников, есть ли относительно простой способ, чтобы не разбивать строку, не момещать данные во временную таблицу, в общем чтобы было поменьше гемороя

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

xml передавай
или "на месте" преобразуй список в xml - времянка тогда не понадобится
iap
Дата: 06.02.2013 13:43:58
WHERE ';123;456;7855;' LIKE '%;'+CAST(ID AS VARCHAR)+';%'
mike909
Дата: 06.02.2013 13:48:14
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 
iap
Дата: 06.02.2013 14:08:03
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
rantu
Дата: 06.02.2013 17:07:51
pkarklin
Table-Valued Parameters


по моему то что нужно
Crimean
Дата: 06.02.2013 17:32:28
rantu
по моему то что нужно


пока у вас разных типов входных параметров будет не так много - да. а вот дальше есть риск скатиться в полное УГ
pkarklin
Дата: 06.02.2013 20:40:42
Crimean
пока у вас разных типов входных параметров будет не так много - да. а вот дальше есть риск скатиться в полное УГ


Ни чуть не большее УГ, чем захардкоженный разбор XML...