2011-06-02 27 views
8

我希望能够从文本框标记输入字符串来执行我的查询。 例如:用户在文本框中输入“abc xyz 123”。 我想这样做:Transact-SQL:如何标记字符串?

SELECT * FROM database WHERE Name contains "abc" AND "xyz" AND "123" 
-- as opposed to containing "abc xyz 123" 
-- please ignore my sql syntax, I am an absolute beginner 

谢谢。

回答

6

使用字符串分割功能(例如,像this one),你可以有这样的事情:

SELECT t.* 
FROM atable t 
    INNER JOIN dbo.Split(@UserInput, ' ') s ON t.Name LIKE '%' + s.Data + '%' 
0

您可以使用动态SQL来实现这一目标:

declare @InputText varchar(8000) 
set @InputText = 'abc xyz 123' 

declare @CommorText varchar(8000) 
set @CommorText = 'SELECT * FROM table WHERE Name like ''%' + replace(@InputText, ' ', '%'' or Name like ''%') + '%'''; 

-- @CommorText would look like this at this point 
-- SELECT * FROM table WHERE Name like '%abc%' or Name like '%xyz%' or Name like '%123%' 

execute(@CommorText) 

[编辑]回应Avitus评论:

不是最完美的解决方案。但是,如果有人进入“下拉表TEST1”,查询将SELECT * FROM Test1 WHERE Name like '%drop%' or Name like '%table%' or Name like '%Test1%'

+1

是的,直到有人输入一个参数,如“ - drop yourDatabase”或任何其他SQL注入攻击 – Avitus 2011-06-02 02:10:37

0

我有同样的题。我得到了1,200行字符串以空格字符分隔。我的答案是使用Open Office Calc等电子表格。那么如果你需要把它们放在db中,你可以通过公式生成插入脚本。这不会使用SQL,但它可能会解决像我的问题。