Это потому, что они не являются одним и тем же запросом - ваш переменный текст не вставляется в запрос.
В запросе 1 вы проверяете, что @c
не равно нулю (true, вы установили его) и что его длина больше 0 (true, это 10). Поскольку оба они верны, запрос 1 становится:
select top 1 * from myTable
(Возвращает первую строку в myTable на основе соответствующего индекса.)
РЕДАКТИРОВАТЬ: Обращаясь к комментариям по вопросу.
declare @myTable table
(
columnName varchar(50)
)
insert into @myTable values ('8')
declare @c nvarchar(50)
set @c = 'columnName'
select top 1 *
from @myTable
where @c is not null
and len(convert(varchar, @c)) > 0
select top 1 *
from @myTable
where columnName is not null
and len(convert(varchar,columnName)) > 0
Теперь, когда я запускаю это, оба запроса возвращают один и тот же результат. Вам нужно будет сообщить мне, где я искажаю ваши фактические данные / запрос, чтобы получить дополнительную помощь (или просто подробно опишу это, чтобы найти решение).