0
문자열의 순서에 관계없이 문자열 매개 변수에 전달 된 모든 단어가 특정 열에 포함되어있는 모든 행을 검색하려고합니다. 문자열의 모든 단어를 포함하는 행을 반환하십시오.
매개 변수가 'hi abc'
경우
abc def hijk
하지
hijk lmnop qr
내가 그것을 어떻게 관리를하지만 난 그게 내가 대안을보고 싶습니다 매우 좋지 않다 생각한다. 어떻게 내 코드 아래에서 더 잘 수행 할 수 있습니까?
create table t (s varchar(200));
insert into t (s) values
('abc def hijk'),
('hijk lmnop qr'),
('stu'),
('v xyz')
;
create function dbo.matchRows (@string varchar(max))
returns varchar(max)
begin
set @string = replace(@string, '''', '''''');
set @string = replace(@string, ' ', ' ');
set @string = replace(@string, ' ', ' ');
set @string = replace(@string, ' ', '%'' and s like ''%');
set @string = 's like ''%' + @string + '%''';
set @string = 'select * from t where ' + @string;
return @string;
end;
declare @query varchar(max);
set @query = (select dbo.matchRows('hi abc'));
execute (@query);
+1 신중히 노력하십시오. 하지만 '내부 조인'으로 이어지는 '그룹 가입'을 내 간단한 쿼리보다 낫거나 깔끔하지 않은 것으로 받아들이는 것을 삼가 할 것입니다. 아마도 성능면에서 더 나을 것입니다. XML, IMO를 다루는 것이 문자열 연결만큼 복잡하다는 것은 말할 필요도 없습니다. –
XML에 동의합니다. 다른 방법은 SQL 2008 및 .net (3.5 생각합니다) 저장 프로 시저를 만들고 문자열 대신 테이블 매개 변수를 전달하는 것입니다 사용하는 경우입니다. 그렇게 할 수 있다면 마지막 선택 진술에서 시작할 수 있습니다. 나는 전에 그것들을 망쳐 놓지 않았다. 그러나 그렇게 나쁘지 않아야한다. – CompuChip