Как избежать курсора в SQL Server? также хочу избежать цикла - PullRequest
2 голосов
/ 20 июня 2010

У меня есть две таблицы в моей базе данных, первая содержит пару предложений, например «Я люблю яблоки и бананы», вторая содержит ключевое слово, например «яблоко» и «апельсин».Я хочу создать SQL-операторы или usp, чтобы перечислить все столбцы в 1-й таблице с ключевыми словами во 2-й.Как я могу добиться этого без использования курсоров?

У кого-нибудь были бы какие-нибудь умные идеи, а не цикл while?Это будет здорово.

Спасибо, Лин

1 Ответ

2 голосов
/ 20 июня 2010

Посмотри, если это то, что тебе нужно ...

Вариант 1 возвращает строку для каждого ключевого слова, соответствующего фразе ...

Вариант 2 возвращает CSV ключевых слов в фразе. Обратите внимание, что здесь используются функции, связанные с SQL 2005.

Я сделал тестовый пример для вас ... Возможно, это поможет вам объяснить проблему.

create table #test(id int identity(1,1), phrase varchar(1000))

create table #kenter code hereeyword(id int identity(1,1), keyword varchar(50))

insert into #test
select 'I like apples and bananas'

insert into #keyword
select 'APPLE'
UNION
select 'BANANA'
UNION 
select 'RASPBERY'


select 
    t.*,
    k.keyword
 from #test t
    inner join #keyword k on t.phrase like '%' + k.keyword + '%'

--OR...


select 
    t.*,
    Keywords = (    
        select k.keyword + ',' as [text()] 
        from #keyword k 
        where t.phrase like '%' + k.keyword + '%'
        FOR XML PATH('')) 
 from #test t



drop table #test

drop table #keyword
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...