2015-03-27 4 views
0

Я хочу создать свой собственный запрос с параметрами в мастере конфигурации TableAdapter.Использовать Sql LIKE в TableAdapter для значений int

Таким образом, после этого я использую этот код, но это не так:

SELECT Name, ProjID 
FROM ProjectTable 
WHERE (ProjID LIKE @ProjID%) 

потому что >> ошибка синтаксиса новый «)», это понятно.

После некоторых поисков, кто-то с той же проблемой, предлагает использовать что-то вроде этого:

SELECT Name, ProjID 
FROM ProjectTable 
WHERE (ProjID LIKE @ProjID + '%') 

, но это еще не так, и дать мне эту ошибку во время выполнения:

преобразования не удалось при преобразовании значение varchar '%' для типа данных int.

И это тоже понятно, потому что я использую + '%' в запросе, который указывает на тип данных int.

Итак, как я могу решить эту проблему (я имею в виду создать параметр для запроса в TableAdapter специально для типов данных int)?

Заранее спасибо

+1

вы не можете делать LIKE на int. Это для varchar –

ответ

1

Похоже, что @ProjID - это числовой тип данных. Вам нужно будет передать его в varchar, прежде чем добавлять% к нему.

Я не уверен, что SQL вы используете, если это Sql вариант сервера попробуйте

SELECT  Name, ProjID 
FROM   ProjectTable 
WHERE  (cast(ProjID as varchar(30) LIKE cast(@ProjID as varchar(30)) +'%') 

Вам может понадобиться настроить VARCHAR (30), на что-то большее или меньшее, чтобы приспособить размер ваше значение. ProjID будет автоматически добавляться в varchar для сравнения, но лучше также использовать его.

Это не самый эффективный запрос. Из-за литого (неявного или явного) имени столбца он не будет использовать индексы, определенные для него.

+2

Отличный момент об этом неэффективен. Приведение в varchar и выполнение операции LIKE полностью удаляет любую производительность, полученную с помощью столбца int. Я чувствую, что есть лучший способ добиться того, чего хочет OP. –

+2

Да, вы тоже правы ... спасибо –

+0

@Kalmino Вы можете оценить мой ответ, за что он стоит. Спасибо, что указали мою первоначальную ошибку. – Biscuits

2

Вы можете выполнять только LIKE операции на струнах. Таким образом, вы можете сделать это:

SELECT  Name, ProjID 
FROM   ProjectTable 
WHERE  CAST(ProjID AS varchar(31)) LIKE CAST(@ProjID AS varchar(31))+'%' 
+2

Да, это правильно ... спасибо –

0

Вы можете просто избежать беспорядка VARCHAR.

SELECT Name, ProjID 
FROM ProjectTable 
WHERE ProjID = @ProjID OR ProjID >= 10 * @ProjID 

 Смежные вопросы

  • Нет связанных вопросов^_^