2010-02-01 5 views
2

Как написать процедуру хранения для поиска определенной строки в столбце таблицы, для заданного набора строк (CSV-строка).Как написать процедуру хранения для поиска (CSV)?

как: выберите * от ххх, где теги, как («Оскаром», «рахман», «Slumdog»)

как я могу написать процедуру для этой комбинации тегов.

+0

Есть ли причина того, что вам нужно проанализировать файл с помощью SQL Server в качестве СУБД лучше для хранения данных и не очень, предназначенные для разбора CSV файлов. – Kane

+0

привет, мистер Кейн, на самом деле в моем проекте у меня есть кнопки поиска, там пользователь может дать любые имена комбинаций. как я могу написать storeprocedure. –

ответ

0

Чтобы создать строку через запятую ...

Затем можно применить этот список, например Одед создать LIKE части WHERE cluase на лету.

DECLARE @pos int, @curruntLocation char(20), @input varchar(2048) 
SELECT @pos=0 
SELECT @input = 'oscar,rahman,slumdog' 
SELECT @input = @input + ',' 

CREATE TABLE #tempTable (temp varchar(100)) 

WHILE CHARINDEX(',',@input) > 0 
BEGIN 
SELECT @pos=CHARINDEX(',',@input) 
SELECT @curruntLocation = RTRIM(LTRIM(SUBSTRING(@input,1,@pos-1))) 
INSERT INTO #tempTable (temp) VALUES (@curruntLocation) 
SELECT @input=SUBSTRING(@input,@pos+1,2048) 
END 

SELECT * FROM #tempTable 
DR0P TABLE #tempTable 
+0

Mr.Kevchadders я изменить подобно процедуре, как этот создать процедуру скрапа (@string VARCHAR (200)) в DECLARE @pos междунар, @curruntLocation символ (20), @input VARCHAR (2048) ВЫБРАТЬ @ поз = 0 ВЫБРАТЬ @input = @string ВЫБОР @input = @input + '' CREATE TABLE #tempTable (временный VARCHAR (100)) ПРИ CHARINDEX ('', @ вход)> 0 BEGIN Выберите @ поз = CHARINDEX (',', @ input) SELECT @curruntLocation = RTRIM (SUBSTRING (@ input, 1, @ pos-1)) INSERT INTO #tempTable (temp) VALUES (@curruntLocation) SELECT @ input = SUBSTRING (@ input, @ pos + 1,2048) END выберите * из видео, где теги в (выберите * from #temptable) –

+0

, когда я запустил процедуру, она не показывает столбца, не может помочь мне i chage some code in кнопка ur-кода может выглядеть так, как я ее отправил предыдущий код. –

+0

не забудьте оставить временную таблицу и протестируйте, чтобы убедиться, что данные существуют в #temptable, прежде чем вы выберите из таблицы vidoes. например поместите SELECT * FROM #tempTable перед выбором * из Vidoes ... – kevchadders

0

Во-первых, использование like для точных совпадений является неоптимальным. Мог бы также использовать =, и если это так, то вы можете использовать IN синтаксис:

select * from xxx 
where tags IN ('oscar', 'rahman', 'slumdog') 

Я предполагаю, что вы не ищете точное соответствие, но и для любой записи, где tags поле содержит все из теги.

Это было бы что-то вроде этого:

select * from xxx 
where tags like '%oscar%' 
    and tags like '%rahman%' 
    and tags like '%slumdog%' 

Это будет не очень быстро или производительным, хотя.

Подумайте о переносе этой логики в ваше приложение, где это быстрее и проще.

Edit:

После комментариев - есть много примеров того, как parsedelimitedstrings там. Вы можете поместить их в таблицу и использовать dynamic sql для генерации запроса.

Но это будет иметь плохую производительность, и SQL Server не сможет кэшировать планы запросов для такого рода вещей. Как я уже говорил, подумайте о том, чтобы перевести эту логику на уровень приложений.

+0

нормально работает, но у меня есть сомнения. мы не знаем, сколько строк даст пользователю, как я могу написать процедуру для этого –

+0

в приведенном выше, я даю oscar, rahman, slumdog. если пользователь даст какое-то количество строк в то время, как мы можем написать процедуру хранения для этого –

+0

Вы хотите разобрать строку, разделенную запятой, и выполнить поиск по этому вопросу? – Oded

Смежные вопросы