Хранимая процедура Sql Как переменная оператора

print("select CustomerNo, CustomerName, Address, City, State, Zip,
 Phone, Fax, ContactName, Email 
 from Customers where CustomerName like '%field%'");

Привет всем. Это простой вопрос, но я не смог понять, так как я довольно новичок в tsql и sql вообще.

Я использую вышеуказанную хранимую процедуру для поиска. Мой вопрос касается "% field%". Какую переменную вы используете или как она работает в tsql? например, "где Customers = @CustomerNo". как насчет шаблона? как вы проходите переменную вместе с шаблоном? Я думаю, я могу сделать "%" + "поле" + "%" в коде, но есть ли способ не делать этого?

3 ответа

Подстановочные знаки - это просто часть строкового литерала, например. '% field%' - это просто строка.

Вы можете объединить подстановочные знаки в свою строку, а затем использовать строку:

@Pattern = '%' + @CustomerName + '%';
...WHERE CustomerName LIKE @Pattern

Или иначе вы можете написать выражение в SQL с участием конкатенации:

WHERE CustomerName LIKE '%' + @CustomerName + '%'

Нет другого магического решения для этого.


Это очень просто. "=" и "Like" - оба оператора. Что вы можете сделать после того, как сможете сделать это за другим.

Итак, если в С# и с использованием вызовов SQLClient вы можете сказать:

string value;
...
value = "Some name";
...
myCommand.CommandText = "Select...from Customers Where CustomerName Like @Var";
myCommand.Parameters.AddWithValue("@Var", "%" + value + "%");
myCommand.ExecuteNonQuery();


Если вы используете =, вы говорите "равно", который не будет использовать подстановочные знаки.

Если вы используете LIKE, который работает только в текстовых полях, он может использовать подстановочные знаки.

Невозможно получить подстановочные соответствия с =.

Обратите внимание, что в зависимости от данных поиск по шаблону может выполнять сканирование таблицы, поэтому я должен убедиться, что вы хотите, прежде чем разрешить его.

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

WHERE CustomerID LIKE '%1'

т. все клиенты, у которых есть идентификатор клиента (который является текстом), который заканчивается на 1. Это не может быть разрешено с помощью индекса.

Заключительные мысли. Я не уверен на 100%, я точно понимаю, что вы просите. Не могли бы вы прояснить. Что конкретно вы подразумеваете под словом "передать переменную вместе с подстановочным знаком"?

licensed under cc by-sa 3.0 with attribution.