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

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

Спасибо!
...
Рейтинг: 0 / 0
Преобразование данных.
    #32009790
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посмотри http://www.sql.ru/cgi-bin/UltraBoard/UltraBoard.pl?Action=ShowPost&Board=mssql&Post=1733
Чтобы не писать кучу set'ов можно создать табличку перекодировки где русским буквам будут соответствовать английские буквы и символы. А потом меняй в цикле.
...
Рейтинг: 0 / 0
Преобразование данных.
    #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
Преобразование данных.
    #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
Преобразование данных.
    #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
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Преобразование данных.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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