Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как заставить заработать скрипт.  [new]
DEMON OF SILVER
Member

Откуда:
Сообщений: 4
 
 DECLARE @key_word nvarchar(max)
 SET  @key_word='лес'
 SELECT @key_word



Как преобразуя саму переменную @key_word (а не строковую константу) вывести 'лес', а не '???' ?
22 июл 14, 23:44    [16344271]     Ответить | Цитировать Сообщить модератору
 Re: Как заставить заработать скрипт.  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
DEMON OF SILVER
 
 DECLARE @key_word nvarchar(max)
 SET  @key_word='лес'
 SELECT @key_word



Как преобразуя саму переменную @key_word (а не строковую константу) вывести 'лес', а не '???' ?
Прочитать документацию в разделе Использование данных в Юникоде
23 июл 14, 00:07    [16344331]     Ответить | Цитировать Сообщить модератору
 Re: Как заставить заработать скрипт.  [new]
west74
Member

Откуда: Челябинск
Сообщений: 76
а так ???

DECLARE @key_word nvarchar(max)
SET @key_word=N'лес'
SELECT @key_word
23 июл 14, 08:18    [16344611]     Ответить | Цитировать Сообщить модератору
 Re: Как заставить заработать скрипт.  [new]
DEMON OF SILVER
Member

Откуда:
Сообщений: 4
sphinx_mv
а так ???
DEMON OF SILVER
 

 DECLARE @key_word nvarchar(max)
 SET  @key_word='лес'
 SELECT @key_word




Как преобразуя саму переменную @key_word (а не строковую константу) вывести 'лес', а не '???' ?

Прочитать документацию в разделе Использование данных в Юникоде


Эт я в курсе.

Представьте себе, что вы без понятия в каком формате передаётся строка ( с N или без N). Задача обработать данные корректно.
23 июл 14, 08:38    [16344630]     Ответить | Цитировать Сообщить модератору
 Re: Как заставить заработать скрипт.  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
DEMON OF SILVER

Представьте себе, что вы без понятия в каком формате передаётся строка ( с N или без N). Задача обработать данные корректно.


А представьте что строка передает китайский иероглив но не в юникоде, и как понять что это именно иероглиф, а не арабская буква?
23 июл 14, 08:44    [16344650]     Ответить | Цитировать Сообщить модератору
 Re: Как заставить заработать скрипт.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31960
DEMON OF SILVER
Представьте себе, что вы без понятия в каком формате передаётся строка ( с N или без N). Задача обработать данные корректно.
Какой ещё "формат передачи"?

Нужно просто записать в переменную правильные байты. Как это сделать - зависит от приложения, непонятно, как заполняется эта ваша переменная. Если вы туда записываете три одинаковых байта "?", то они там и будут лежать, как вы переменную не меняйте.
23 июл 14, 09:12    [16344752]     Ответить | Цитировать Сообщить модератору
 Re: Как заставить заработать скрипт.  [new]
west74
Member

Откуда: Челябинск
Сообщений: 76
тогда подобрать кодировку :)

используя collate

DECLARE @key_word varchar(max)
SET @key_word='лес'
SELECT @key_word collate Cyrillic_General_CS_AI,
@key_word collate Albanian_CI_AI

подобрать как то так

DECLARE @key_word varchar(max);
declare @aType varchar(200);
declare @SQL nvarchar(max);

SET @key_word='лес';

--drop table #t;
create table #t(tt nvarchar(200),code varchar(200))


DECLARE my_cursor CURSOR
FOR SELECT cast(name as varchar(200)) FROM sys.fn_helpcollations()
OPEN my_cursor;

FETCH NEXT FROM my_cursor INTO @aType
WHILE @@fetch_status = 0
begin

set @SQL='DECLARE @key_word varchar(max);';
set @SQL=@SQL+' set @key_word='''+@key_word+''';';
set @SQL=@SQL+' if cast(substring((SELECT @key_word collate '+@aType+'),1,3) as nvarchar(200))<>N''???''';
set @SQL=@SQL+'insert into #t (tt,code) values (@key_word collate '+@aType+','''+@aType+''');';

execute sp_executesql @Sql;

FETCH NEXT FROM my_cursor INTO @aType
end

CLOSE my_cursor
DEALLOCATE my_cursor
select * from #t
23 июл 14, 10:16    [16345068]     Ответить | Цитировать Сообщить модератору
 Re: Как заставить заработать скрипт.  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
DEMON OF SILVER
Представьте себе, что вы без понятия в каком формате передаётся строка ( с N или без N). Задача обработать данные корректно.
Некорректные исходные данные корректно не обрабатываются.
Хотите хранить уникод - передавайте данные в уникоде.
Или установите правильный COLLATION для сервера/базы/етц.
ЗЫ. У меня на сервере для Вашего примера из "лес"а получился "лес", если что...
23 июл 14, 10:31    [16345143]     Ответить | Цитировать Сообщить модератору
 Re: Как заставить заработать скрипт.  [new]
o-o
Guest
sphinx_mv
ЗЫ. У меня на сервере для Вашего примера из "лес"а получился "лес", если что...


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

а на вопрос ТС ответ -- никак.
ну т.е. надо "сменить коллейшен переменной", и этого можно достичь либо выполняя код в базе с подходящим коллэйшеном,
либо меняя коллэйшен самой базы на подходящий
23 июл 14, 12:50    [16346120]     Ответить | Цитировать Сообщить модератору
 Re: Как заставить заработать скрипт.  [new]
o-o
Guest
west74
тогда подобрать кодировку :)

используя collate

DECLARE @key_word varchar(max)
SET @key_word='лес'
SELECT @key_word collate Cyrillic_General_CS_AI,
@key_word collate Albanian_CI_AI



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

К сообщению приложен файл. Размер - 42Kb
23 июл 14, 13:04    [16346230]     Ответить | Цитировать Сообщить модератору
 Re: Как заставить заработать скрипт.  [new]
DEMON OF SILVER
Member

Откуда:
Сообщений: 4
Спасибо за ответы.
И как я понимаю, что просто так мне СУБД не даст создать столбец с нужным collate?
23 июл 14, 22:03    [16349085]     Ответить | Цитировать Сообщить модератору
 Re: Как заставить заработать скрипт.  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8813
collate пользовательской базы совпадает с collate системных баз?

В операторе SET и SELECT можно использовать collate...
23 июл 14, 23:15    [16349304]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить