Я пишу хранимую процедуру, и мне нужно сравнить переменную SQL Server с столбцом. Проблема в том, что если моя переменная SQL является VARCHAR, которая не совпадает с типом столбца, она не будет соответствовать.Сравнение VARCHAR различной длины
Пример:
Скажем, у меня есть таблица types
с колонкой name
, который имеет тип VARCHAR(100)
. Выполнение кода ниже не даст мне никаких результатов:
DECLARE @type VARCHAR(20);
SET @type = 'My Type Name';
select * from types where name = @type
Однако выполнение этого запроса будет найти мою колонку:
DECLARE @type VARCHAR(100);
SET @type = 'My Type Name';
select * from types where name = @type
Теперь, я хотел бы быть в состоянии сделать это первым потому что, если я изменяю столбец, я не хочу, чтобы этот запрос начал сбой. Может ли кто-нибудь сказать мне, что я делаю неправильно?
Edit:
Вот моя колонка схемы:
Запрос:
DECLARE @event_type VARCHAR(20);
SET @event_type = 'Price Increase Notification';
select * from events.types where name = @event_type
Выход:
Запрос:
DECLARE @event_type VARCHAR(100);
SET @event_type = 'Price Increase Notification';
select * from events.types where name = @event_type
Выход:
Можете ли вы поделиться некоторыми выборочные данные, где найти это происходит? '' My Type Name '' в строке длиной 20 равно '' My Type Name'' в строке длиной 100.Если вы попытаетесь установить переменную длиной 20 в значение с большей длиной, она будет усечена, и вы можете получить неожиданные результаты. – HoneyBadger
Когда ввод '' My Type Name ''более 20 символов, первый не будет выполнен. Он усекает ввод до 20 символов и проверяет его на' имя'. Он не будет вызывать никаких исключений или предупреждений –
Обновлен вопрос с примерами. – snyderxc