2013-06-21 2 views
0
declare @CustField6 nvarchar(10) 
declare @sample nvarchar(10) 
set @CustField6 = 'sf' 

select customer_id from csu_customer_policy 
    inner join csu_policy on csu_policy.policy_number = csu_customer_policy.policy_number 
    and csu_policy.data_source = csu_customer_policy.data_source 
    where csu_policy.vehicle_no like + '''' + @CustField6 + '%''' and csu_customer_policy.delete_status = 0 and csu_customer_policy.site_id = 1 

Я хочу, чтобы все записи, которые имеют csu_policy.vehicle_no начинается с sf%как вопрос оператора в SQL сервере

, если я дам значение sf непосредственно вместо @CustField6 это дает все мои записи, но когда я выполнить это с помощью @CustField6 он не дает никакой ошибки, но не получает никаких записей, даже я напечатал этот код, чтобы проверить, правильно ли оформлен запрос, и он работает нормально. Но я не знаю, почему он не извлекает какие-либо записи?

ответ

2

Ваш синтаксис неверен. Оно должно быть:

where csu_policy.vehicle_no like @CustField6 + '%' 

Предполагая, что @CustField6 равно sf, это эквивалентно

where csu_policy.vehicle_no like 'sf%' 

Если вы сделаете это:

where csu_policy.vehicle_no like '''' + @CustField6 + '%'''' 

Тогда вы фактически делаете это:

where csu_policy.vehicle_no like '''sf%''' 

Другими словами, вы находите записи, которые соответствуют 'sf%' - записи, которые начинаются с цитаты, затем sf, затем все, а затем заканчивается цитатой.

+0

когда-либо мы задаем значение, как это должно быть в одинарных кавычках правильно? вот почему он обрамлен так, что если я дам то, что вы сказали, это retreiving records, чьи транспортные средства no's являются «sjrt45», «sghfg78» также – praveen

+0

, если @ CustField6 равен 'sf', то приведенное выше эквивалентно' like 'sf%' '.Это тот результат, который вы хотите? – Blorgbeard

0

Я думаю, что проблема с вашим запросом в том, что у вас есть несколько многого ' и + в ваших где условиях: Это должно быть where csu_policy.data_source like @custField6 + '%' вместо csu_policy.vehicle_no like + '''' + @CustField6 + '%'''

declare @CustField6 nvarchar(10) 
declare @sample nvarchar(10) 
set @CustField6 = 'sf' 

select customer_id 
from csu_customer_policy 
inner join csu_policy on csu_policy.policy_number = csu_customer_policy.policy_number 
     and csu_policy.data_source = csu_customer_policy.data_source 
where csu_policy.vehicle_no like @CustField6 + '%' 
and csu_customer_policy.delete_status = 0 and csu_customer_policy.site_id = 1 
+0

когда мы указываем значение, как это должно быть в одинарных кавычках, верно? Это причина, по которой он был создан таким образом, если я дам то, что вы сказали, это отыскание записей, чей автомобиль no 'sjrt45', 'sghfg78' также – praveen

+0

Единственное, что делает @ CustField6 + '%', это создание строки, которая объединена с 'sf' + '%', поэтому результат будет интерпретироваться как 'sf%' кавычки в SQL используются, потому что подобный оператор требует ввода в виде строки. – JanR

0

Попробуйте избавиться от +

from 
csu_policy.vehicle_no like + '''' + @CustField6 + '%''' 

To 
csu_policy.vehicle_no like ''''+ @CustField6 + '%''' 
1

Измените критерии:

WHERE csu_policy.vehicle_no LIKE @CustField6 + '%' 

Демонстрация: SQL Fiddle

0

Удалить нежелательные цитаты .. Попробуйте это.

declare @CustField6 nvarchar(10) 
declare @sample nvarchar(10) 
set @CustField6 = 'sf' 

select customer_id from csu_customer_policy 
    inner join csu_policy on csu_policy.policy_number = csu_customer_policy.policy_number 
    and csu_policy.data_source = csu_customer_policy.data_source 
    where (csu_policy.vehicle_no like + '' + @CustField6 + '%') and  
      csu_customer_policy.delete_status = 0 and 
      csu_customer_policy.site_id = 1 
0

Пожалуйста, используйте одинарную кавычку согласно ниже:

declare @CustField6 nvarchar(10) 
declare @sample nvarchar(10) 
set @CustField6 = 'sf' 

select customer_id from csu_customer_policy 
    inner join csu_policy on csu_policy.policy_number = csu_customer_policy.policy_number 
    and csu_policy.data_source = csu_customer_policy.data_source 
    where csu_policy.vehicle_no like '' + @CustField6 + '%' and csu_customer_policy.delete_status = 0 and csu_customer_policy.site_id = 1