Я использую функцию SPLIT в UDF, чтобы постоянно делать подобные вещи
Выбрать элемент из dbo.fnSplit ('1,2,3,4,5,6,7,8,9', ',')
Это означает, что вам даже не нужно ИСПОЛЬЗОВАТЬ предложение IN
Выбрать * из списка сотрудников CROSS APPLY dbo.FnSplit ('1,2,3,4,5,6,7,8,9', ',')
Где ManagerID = Элемент
Я рекомендую провести некоторое тестирование, на котором функция разбиения лучше всего подходит для ваших нужд
ALTER FUNCTION dbo.Split (@sep char (1), @s varchar (512))
ВОЗВРАЩАЕТСЯ
КАК
ВЕРНУТЬ (
С кусочками (pn, start, stop) AS (
ВЫБЕРИТЕ 1, 1, CHARINDEX (@sep, @s)
СОЮЗ ВСЕХ
ВЫБЕРИТЕ pn + 1, остановка + 1, CHARINDEX (@sep, @s, остановка + 1)
Из частей
Где остановиться> 0
)
ВЫБЕРИТЕ pn,
SUBSTRING (@s, запуск, СЛУЧАЙ, КОГДА ОСТАНОВИТЬ> 0 ТОГДА ОСТАНОВ-СТАРТ ELSE 512 END) AS s
Из частей
)
GO
или
СОЗДАТЬ ФУНКЦИЮ dbo.Split
(
@RowData nvarchar (2000),
@SplitOn nvarchar (5)
)
ВОЗВРАЩАЕТСЯ @RtnValue table
(
Id int identity (1,1),
Данные нварчар (100)
)
AS
НАЧАТЬ
Объявите @Cnt int
Установить @Cnt = 1
While (Charindex(@SplitOn,@RowData)>0)
Begin
Insert Into @RtnValue (data)
Select
Data = ltrim(rtrim(Substring(@RowData,1,Charindex(@SplitOn,@RowData)-1)))
Set @RowData = Substring(@RowData,Charindex(@SplitOn,@RowData)+1,len(@RowData))
Set @Cnt = @Cnt + 1
End
Insert Into @RtnValue (data)
Select Data = ltrim(rtrim(@RowData))
Return
END
и т. Д. http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=50648