Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Преобразование данных. / 5 сообщений из 5, страница 1 из 1
18.07.2001, 05:55
    #32009788
Сергей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование данных.
Господа, совет нужен.

Подскажите технологию.
Надо при занесении новых данных в таблицу, преобразовывать данные из пары стольцов из русского в латиницу.
Как это реализовать, можно это сделать средствами SQL?

Спасибо!
...
Рейтинг: 0 / 0
18.07.2001, 06:25
    #32009790
Павел
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование данных.
Посмотри http://www.sql.ru/cgi-bin/UltraBoard/UltraBoard.pl?Action=ShowPost&Board=mssql&Post=1733
Чтобы не писать кучу set'ов можно создать табличку перекодировки где русским буквам будут соответствовать английские буквы и символы. А потом меняй в цикле.
...
Рейтинг: 0 / 0
18.07.2001, 08:03
    #32009808
Павел
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование данных.
Никак не отвыкну от приемов работы с 6.5 - 7.0. С помощью UDF вообще легко:

Create Table Codetable (rus Char(1) Not Null, Lat Varchar(2))

go

Insert Into Codetable Select 'а', 'a'
Insert Into Codetable Select 'б', 'b'
Insert Into Codetable Select 'в', 'v'
Insert Into Codetable Select 'г', 'g'
Insert Into Codetable Select 'ж', 'zh'
Insert Into Codetable Select 'ш', 'sh'
Insert Into Codetable Select 'ъ', null
-- ...

go

Create Function Transcode (@s Varchar(50))
Returns Varchar(50)
Begin
Select @s = Replace(@s, rus, Isnull(lat, '')) From Codetable
Return @s
End

go

select dbo.Transcode('абвгъжш')

drop function Transcode

go

drop table Codetable

go

Используй хоть в триггере на вставку с любым количеством записей в Inserted.
...
Рейтинг: 0 / 0
18.07.2001, 10:36
    #32009835
Sergey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование данных.
Да в том все и дело, что 7.0
Если использовать процедуру с ссылки выше, как ее вызывать?
Не делать же exec процедуры для каждого столбца таблицы, каждой буквы по отдельности?
(сделал, все работает, применимо к одному столбцу.
exec usp_search_replace @tname='uinfo', @klname = 'FAM1', @rsymv='а', @esymv='а'
exec usp_search_replace @tname='uinfo', @klname = 'FAM1', @rsymv='б', @esymv='b'
...
Но мне надо применимо к нескольким).

У меня с SQL опыта нет, извините за несуразные вопросы. Пришлось осваивать.
...
Рейтинг: 0 / 0
18.07.2001, 11:15
    #32009838
Павел
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование данных.
В 7.0 вся сложность в том, что если необходимо обработать сразу несколько записей то придется строить по ним цикл, например курсором. Допустим нужно перекодировать поля field1 и field2 во всех записях таблицы Table1, и таблица Codetable из предыдущего примера создана и заполнена.

Create Procedure "sp1"
As
Set Nocount On

Declare @fld1 Varchar(50), @fld2 Varchar(50)

Declare cr Cursor local for Select field1, field2 From Table1

Open cr
Fetch Next From cr Into @fld1, @fld2
While @@Fetch_Status = 0
Begin
Select @fld1 = Replace(@fld1, rus, Isnull(lat, '')), @fld2 = Replace(@fld2, rus, Isnull(lat, '')) From Codetable
Update Table1 Set field1 = @fld1, field2 = @fld2 Where Current Of cr
Fetch Next From cr Into @fld1, @fld2
End
Close cr
Deallocate cr

Return

Go

exec sp1
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Преобразование данных. / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]