Sql хранимая процедура Like Операторская переменная - PullRequest
5 голосов
/ 23 декабря 2008
print("select CustomerNo, CustomerName, Address, City, State, Zip,
    Phone, Fax, ContactName, Email  
    from Customers where CustomerName like '%field%'");

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

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

Ответы [ 3 ]

17 голосов
/ 23 декабря 2008

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

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

@Pattern = '%' + @CustomerName + '%';

...WHERE CustomerName LIKE @Pattern

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

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

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

2 голосов
/ 24 декабря 2008

Это очень просто. «=» и «Мне нравится» оба являются операторами. Что вы можете сделать после одного, что вы можете сделать после другого.

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

string value;
...
value = "Some name";
...
myCommand.CommandText = "Select...from Customers Where CustomerName Like @Var";
myCommand.Parameters.AddWithValue("@Var", "%" + value + "%");
myCommand.ExecuteNonQuery();
0 голосов
/ 23 декабря 2008

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

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

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

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

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

WHERE CustomerID LIKE '%1'

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...