Конференция "Базы" » Хранимые процедуры и параметры с UNICODE [MSSQL]
 
  • Мазут Береговой © (16.04.09 21:02) [0]
    Столкнулся с такой проблемой на MSSQL EXPRESS... Имеется процедура с параметром @criteria varchar(20) и далее выполняется поиск с оператором LIKE:

    SELECT c.[name] FROM dbo.Loc_City c
    WHERE c.[name] LIKE @criteria+'%'
    AND c.code='375'
    AND c.province_id=0
    AND c.region_id=0
    ORDER BY c.[name];

    в параматре сидит значение русскими буковками: Мин. Может быть любое другое.. Выборка ничего не находит, хотя я знаю, что там есть 'Минск'.
    Тогда делаю так:

    declare @criteria nvarchar(30);
    declare @query nvarchar(max);

    Set @criteria='Мин';

    set @query='SELECT c.[name] FROM dbo.Loc_City c
    WHERE c.[name] LIKE '
    ''+@criteria+'%''
    AND c.code='
    '375''
    AND c.province_id=0
    AND c.region_id=0
    ORDER BY c.[name]; '


    print @query;


    Результат такой:
    SELECT c.[name] FROM dbo.Loc_City c
    WHERE c.[name] LIKE '???%'
    AND c.code='375'
    AND c.province_id=0
    AND c.region_id=0
    ORDER BY c.[name];

    Когда добавляю префикс N: Set @criteria=N'Мин';
    то результат получается правильным.

    Так вот вопрос такой: что надо сделать с @criteria, чтоб unicode строка передавлась в query корректно?
  • turbouser © (16.04.09 21:17) [1]

    > @criteria varchar(20)

    @criteria Nvarchar(20)
  • Мазут Береговой © (16.04.09 21:33) [2]
    nvarchar - так и есть. Это я опечатался в тексте. Смотри в коде.
  • sniknik © (16.04.09 21:55) [3]
    > что надо сделать с @criteria
    ничего.
    вообще то это у дельфи всегда были проблемы с юникодом, а не у mssql.
  • Мазут Береговой © (16.04.09 22:21) [4]
    Дело в том, что все остальные функции (добавление, обновление) c юникодом работают корректно, но LIKE никак не хочет... Сначала я передавал значения как параметры в процедуру и исполнял ее, но вот сейчас попробовал построить запрос в программе и исполнить его как query и... все отработало нормально...
  • sniknik © (16.04.09 22:54) [5]
    > но LIKE никак не хочет...
    коде под
    > Тогда делаю так:
    > ...
    нет LIKE, есть работа со строкой, видимо чисто случайно принявшей форму запроса (хозяин про это не в курсе, значит случайно).
  • sniknik © (16.04.09 23:02) [6]
    или хочешь сказать что если в том примере (не в копии, не в другом компоненте, а там где не работает)  поставить вместо LIKE равно, то все налаживается? возвращаешь "ломается"?

    ну тогда это чудо, и надо либо священников вызывать коммп канонизировать, либо их же бесов изгонять... смотря ка подашь.
  • Мазут Береговой © (16.04.09 23:19) [7]
    Про равно я не говорил. Я сказал, что сохраняется и показывается все  корректно, а не вопросиками... А вот когда в query с Like передаю как параметр, то не проходит...
  • sniknik © (16.04.09 23:54) [8]
    > Про равно я не говорил.
    а надо бы, надо проверять варианты, и раз "грешишь" на одно, поставь другое, и все. сразу станет ясно что это ни причем.

    > А вот когда в query с Like передаю как параметр, то не проходит...
    откуда???? про дельфи полный игнор? сделай проверку, тоже самое в Query Analyzer-е. при чем тут вообще Like? ищешь там где "светлее"?
  • sniknik © (16.04.09 23:57) [9]
    > как параметр
    кстати, в приведенном коде
    > Тогда делаю так:
    параметра тоже нет. но
    > Результат такой:
    тем не менее "испорчен".
  • Мазут Береговой © (17.04.09 00:08) [10]
    1. Мне не надо равно, а надо получить список подобных значений;
    2. У меня не дельфи, а C#;
    3. Проблемное место локализовано и выведено в тему;
 
Конференция "Базы" » Хранимые процедуры и параметры с UNICODE [MSSQL]
Есть новые Нет новых   [134477   +39][b:0][p:0.001]