Я не верю, что ваше предложение where делает то, что вы намеревались. Давайте удалим внешнюю строку вар и переформатировать для читаемости:
select PLACEID,LEFT(CONVERT(NVARCHAR(1000),description),500)+'...' as des1
,LOCATIONCITY,ADDRESS,DateT,RENT
from infoone
where(
((address like '%"+txtSearch.Text+"%') or (address like ''))
-- #1 address must match full text or be blank
and
((locationcity like '%"+txtSearch.Text+"%') or (locationcity like ''))
-- #2 locationcity must match full text or be blank
and
((address LIKE '%"+txtSearch.Text+"%') or (address like ''))
-- #3 address must match full text or be blank. Seems a duplicate of #1
)
Эти три прикованы вместе с Андами, так что все три условия должны быть истинными для того, чтобы вернуть результат.
По крайней мере, где положение может быть переписано такое:
select PLACEID,LEFT(CONVERT(NVARCHAR(1000),description),500)+'...' as des1
,LOCATIONCITY,ADDRESS,DateT,RENT
from infoone
where(
(address like '%"+txtSearch.Text+"%')
or
(locationcity like '%"+txtSearch.Text+"%')
or
(address + locationcity like '%"+txtSearch.Text+"%')
or
(address + ' ' + locationcity like '%"+txtSearch.Text+"%')
)
Это вернет запись, если текст матч был найден в любом адресе или locationcity, или если текст спички их при объединении или в сочетании с пространством.
Вот почему вы не получите никаких результатов на введенном образце. С приведенным выше кодом вы должны получить соответствие в последнем четвертом состоянии при поиске «main street edmonton»
Сначала вы должны получить код, работающий с нединамическим SQL в SSMS, используя переменную для вашего текста (например, @TEXT), и как только он возвращает результаты, которые вы хотите на основе вашего текстового параметра, вы можете переключить его на динамический. Написание этого как строки SQL для выполнения просто усложняет ситуацию, пока вы все еще работаете над разработкой кода SQL.
Для более широкого решения, вы можете захотеть взглянуть на Full Text Search: http://msdn.microsoft.com/en-us/library/ms142571.aspx
Это распадается строка на отдельные слова, и ищет те слова, что позволяет подойти с весовыми догадками и рейтинг матча. Он даже позволяет использовать аналогичные термины с использованием тезауруса, поэтому, если кто-то искал «123 Main St.», и "123 Main Street" была в базе данных, она найдет их в качестве совпадения.
Что произойдет, если я ищу ''))) DROP TABLE infoone - '? –