# #sql #sql-server #go
Вопрос:
Я хочу получить список записей из базы данных SQL, используя, например, % до и после поискового запроса. Я использую github.com/denisenkom/go-mssqldb посылка. В настоящее время мой запрос выглядит следующим образом:
row, err := DB.Query("SELECT * FROM Person WHERE Name LIKE %@p1%", nameToSearch)
Это приводит к ошибке: Incorrect syntax near '@p1'.
Я пробовал другие варианты запроса, включая следующие:
SELECT * FROM Person WHERE Name LIKE '%%' @p1 '%%'
SELECT * FROM Person WHERE Name LIKE '%%' || @p1 || '%%'
Они тоже терпят неудачу.
Является ли драйвер, который я использую, неспособным поддерживать лайки с помощью подстановочных знаков?
Комментарии:
1. Синтаксис для MSSQL должен быть
like '%' @p1 '%'
таким . Попробуйте это с вашим водителем и посмотрите, работает ли это.2. Какую базу данных вы используете?
3. @GordonLinoff это для SQL Server.
4. Спасибо @APH, это сработало! Я думал, что тоже попробовал этот вариант, но, думаю, нет.
5. @JHizzal . . . Передайте значение в качестве параметра и добавьте подстановочные знаки в приложение.
Ответ №1:
Для полноты/в случае потери комментариев — в T-SQL/MS SQL синтаксис для использования переменной в качестве подстановочного знака следующий:
DECLARE @p1 VARCHAR(10) = 'test' --declare and set variable
print '%' @p1 '%' --for example to see concatenation (not necessary for code below)
print '%@p1%' --compared to incorrect syntax treating @p1 as a string rather than a variable
SELECT * FROM MyTable WHERE Column LIKE '%' @p1 '%' --correct syntax for wildcard criteria
Ответ №2:
Заслуга @APH, но правильный синтаксис в коде GO таков:
row, err := DB.Query("SELECT * FROM wsd.CUSMASFL WHERE CMNAME LIKE '%' @p1 '%'", nameToSearch)
Комментарии:
1. Рад, что это сработало! Добавлено немного больше деталей ниже для справки будущих спрашивающих.