Вы можете обмануть, глядя на пакет GNU Octave image . В качестве языка скриптов есть im2col и col2im:
Насколько я понимаю, он отличается большинством в стиле комментариев (# вместо%) и другим строковым стилем (вместо «). Если вы измените это и удалите тест assert внизу, это может быть
Кроме того, знайте о лицензии (GPLv3). Это бесплатно, но ваши изменения также должны быть бесплатными!
Здесь Вы идете - сначала создают следующую функцию...
Create Function [dbo].[SeparateValues]
(
@data VARCHAR(MAX),
@delimiter VARCHAR(10)
)
RETURNS @tbldata TABLE(col VARCHAR(10))
As
Begin
DECLARE @pos INT
DECLARE @prevpos INT
SET @pos = 1
SET @prevpos = 0
WHILE @pos > 0
BEGIN
SET @pos = CHARINDEX(@delimiter, @data, @prevpos+1)
if @pos > 0
INSERT INTO @tbldata(col) VALUES(LTRIM(RTRIM(SUBSTRING(@data, @prevpos+1, @pos-@prevpos-1))))
else
INSERT INTO @tbldata(col) VALUES(LTRIM(RTRIM(SUBSTRING(@data, @prevpos+1, len(@data)-@prevpos))))
SET @prevpos = @pos
End
RETURN
END
затем используйте следующее...
Declare @CommaSeparated varchar(50)
Set @CommaSeparated = '112,112,122'
SELECT ID,Column1,Column2 FROM MyTable WHERE ID IN (select col FROM [SeparateValues](@CommaSeparated, ','))
Я думаю SQL-сервер, который 2008 позволит функциям таблицы.
ОБНОВЛЕНИЕ
Вы сожмете некоторую дополнительную производительность с помощью следующего синтаксиса...
SELECT ID,Column1,Column2 FROM MyTable
Cross Apply [SeparateValues](@CommaSeparated, ',') s
Where MyTable.id = s.col
Поскольку предыдущий синтаксис заставляет SQL Server выполнять дополнительную команду "Sort" с помощью "В" пункте. Плюс - по-моему, это выглядит более хорошим :D!
Если требуется передать массив, Вам будет нужна функция в sql, который может превратить тот массив в подвыбор.
Эти функции очень распространены, и большинство систем собственной разработки использует в своих интересах их.
Самый коммерческий, или довольно профессиональный ORM's делает ins путем выполнения набора переменных, поэтому если у Вас есть та работа, я думаю, что это - стандартный метод.
Вы могли составить временную таблицу, TempTable с отдельным столбцом ОЦЕНИВАЮТ и вставляют все идентификаторы. Затем Вы могли сделать это с подвыбором:
SELECT ID,Column1,Column2 FROM MyTable WHERE ID IN (SELECT VALUE FROM TempTable)
Пойдите с решением, отправленным digiguru. Это - большое допускающее повторное использование решение, и мы используем ту же технику также. Новые члены команды любят его, поскольку это экономит время и сохраняет наши хранимые процедуры последовательными. Решение также работает хорошо с Отчетами SQL, поскольку параметры передали хранимым процедурам для создания передачи recordsets в varchar (8000). Вы просто поднимаете трубку его и идете.
В SQL Server 2008 они наконец нашли время для рассмотрения этой классической проблемы путем добавления нового типа данных "таблицы". По-видимому, это позволяет Вам передать в массиве значений, которые могут использоваться в подвыборе для выполнения того же как оператора IN.
Если Вы используете SQL Server 2008, то Вы могли бы изучить это.
Вот одна техника, которую я использую
ALTER Procedure GetProductsBySearchString
@SearchString varchar(1000),
as
set nocount on
declare @sqlstring varchar(6000)
select @sqlstring = 'set nocount on
select a.productid, count(a.productid) as SumOf, sum(a.relevence) as CountOf
from productkeywords a
where rtrim(ltrim(a.term)) in (''' + Replace(@SearchString,' ', ''',''') + ''')
group by a.productid order by SumOf desc, CountOf desc'
exec(@sqlstring)