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