Как использовать LIKE с % в запросе Select в Go для MSSQL?

# #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. Рад, что это сработало! Добавлено немного больше деталей ниже для справки будущих спрашивающих.