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

Откуда: Краснодар
Сообщений: 1484
использовал таблицу boogier, с этого форума
+
Create Function DOStoWIN (@DOSstr varchar(500)) 
RETURNS varchar(500)
AS
BEGIN
	declare @i int, @DOS int, @WIN int, @str varchar(500)
	set @i=1
	set @str=''
	while @i<=len(@DOSstr) begin
	set @DOS=ascii(substring(@DOSstr,@i,1))
	if @DOS= 0 set @WIN= 32
	if @DOS= 1 set @WIN= 32
	if @DOS= 2 set @WIN= 32
	if @DOS= 3 set @WIN= 32
	if @DOS= 4 set @WIN= 32
	if @DOS= 5 set @WIN= 32
	if @DOS= 6 set @WIN= 32
	if @DOS= 7 set @WIN= 32
	if @DOS= 8 set @WIN= 32
	if @DOS= 9 set @WIN= 32
	if @DOS= 10 set @WIN= 32
	if @DOS= 11 set @WIN= 32
	if @DOS= 12 set @WIN= 32
	if @DOS= 13 set @WIN= 32
	if @DOS= 14 set @WIN= 32
	if @DOS= 15 set @WIN= 32
	if @DOS= 16 set @WIN= 32
	if @DOS= 17 set @WIN= 32
	if @DOS= 18 set @WIN= 32
	if @DOS= 19 set @WIN= 32
	if @DOS= 20 set @WIN= 32
	if @DOS= 21 set @WIN= 32
	if @DOS= 22 set @WIN= 32
	if @DOS= 23 set @WIN= 32
	if @DOS= 24 set @WIN= 32
	if @DOS= 25 set @WIN= 32
	if @DOS= 26 set @WIN= 32
	if @DOS= 27 set @WIN= 32
	if @DOS= 28 set @WIN= 32
	if @DOS= 29 set @WIN= 32
	if @DOS= 30 set @WIN= 32
	if @DOS= 31 set @WIN= 32
	if @DOS= 32 set @WIN= 32
	if @DOS= 33 set @WIN= 33
	if @DOS= 34 set @WIN= 34
	if @DOS= 35 set @WIN= 35
	if @DOS= 36 set @WIN= 36
	if @DOS= 37 set @WIN= 37
	if @DOS= 38 set @WIN= 38
	if @DOS= 39 set @WIN= 39
	if @DOS= 40 set @WIN= 40
	if @DOS= 41 set @WIN= 41
	if @DOS= 42 set @WIN= 42
	if @DOS= 43 set @WIN= 43
	if @DOS= 44 set @WIN= 44
	if @DOS= 45 set @WIN= 45
	if @DOS= 46 set @WIN= 46
	if @DOS= 47 set @WIN= 47
	if @DOS= 48 set @WIN= 48
	if @DOS= 49 set @WIN= 49
	if @DOS= 50 set @WIN= 50
	if @DOS= 51 set @WIN= 51
	if @DOS= 52 set @WIN= 52
	if @DOS= 53 set @WIN= 53
	if @DOS= 54 set @WIN= 54
	if @DOS= 55 set @WIN= 55
	if @DOS= 56 set @WIN= 56
	if @DOS= 57 set @WIN= 57
	if @DOS= 58 set @WIN= 58
	if @DOS= 59 set @WIN= 59
	if @DOS= 60 set @WIN= 60
	if @DOS= 61 set @WIN= 61
	if @DOS= 62 set @WIN= 62
	if @DOS= 63 set @WIN= 63
	if @DOS= 64 set @WIN= 64
	if @DOS= 65 set @WIN= 65
	if @DOS= 66 set @WIN= 66
	if @DOS= 67 set @WIN= 67
	if @DOS= 68 set @WIN= 68
	if @DOS= 69 set @WIN= 69
	if @DOS= 70 set @WIN= 70
	if @DOS= 71 set @WIN= 71
	if @DOS= 72 set @WIN= 72
	if @DOS= 73 set @WIN= 73
	if @DOS= 74 set @WIN= 74
	if @DOS= 75 set @WIN= 75
	if @DOS= 76 set @WIN= 76
	if @DOS= 77 set @WIN= 77
	if @DOS= 78 set @WIN= 78
	if @DOS= 79 set @WIN= 79
	if @DOS= 80 set @WIN= 80
	if @DOS= 81 set @WIN= 81
	if @DOS= 82 set @WIN= 82
	if @DOS= 83 set @WIN= 83
	if @DOS= 84 set @WIN= 84
	if @DOS= 85 set @WIN= 85
	if @DOS= 86 set @WIN= 86
	if @DOS= 87 set @WIN= 87
	if @DOS= 88 set @WIN= 88
	if @DOS= 89 set @WIN= 89
	if @DOS= 90 set @WIN= 90
	if @DOS= 91 set @WIN= 91
	if @DOS= 92 set @WIN= 92
	if @DOS= 93 set @WIN= 93
	if @DOS= 94 set @WIN= 94
	if @DOS= 95 set @WIN= 95
	if @DOS= 96 set @WIN= 96
	if @DOS= 97 set @WIN= 97
	if @DOS= 98 set @WIN= 98
	if @DOS= 99 set @WIN= 99
	if @DOS= 100 set @WIN= 100
	if @DOS= 101 set @WIN= 101
	if @DOS= 102 set @WIN= 102
	if @DOS= 103 set @WIN= 103
	if @DOS= 104 set @WIN= 104
	if @DOS= 105 set @WIN= 105
	if @DOS= 106 set @WIN= 106
	if @DOS= 107 set @WIN= 107
	if @DOS= 108 set @WIN= 108
	if @DOS= 109 set @WIN= 109
	if @DOS= 110 set @WIN= 110
	if @DOS= 111 set @WIN= 111
	if @DOS= 112 set @WIN= 112
	if @DOS= 113 set @WIN= 113
	if @DOS= 114 set @WIN= 114
	if @DOS= 115 set @WIN= 115
	if @DOS= 116 set @WIN= 116
	if @DOS= 117 set @WIN= 117
	if @DOS= 118 set @WIN= 118
	if @DOS= 119 set @WIN= 119
	if @DOS= 120 set @WIN= 120
	if @DOS= 121 set @WIN= 121
	if @DOS= 122 set @WIN= 122
	if @DOS= 123 set @WIN= 123
	if @DOS= 124 set @WIN= 124
	if @DOS= 125 set @WIN= 125
	if @DOS= 126 set @WIN= 126
	if @DOS= 127 set @WIN= 127
	if @DOS= 128 set @WIN= 192
	if @DOS= 129 set @WIN= 193
	if @DOS= 130 set @WIN= 194
	if @DOS= 131 set @WIN= 195
	if @DOS= 132 set @WIN= 196
	if @DOS= 133 set @WIN= 197
	if @DOS= 134 set @WIN= 198
	if @DOS= 135 set @WIN= 199
	if @DOS= 136 set @WIN= 200
	if @DOS= 137 set @WIN= 201
	if @DOS= 138 set @WIN= 202
	if @DOS= 139 set @WIN= 203
	if @DOS= 140 set @WIN= 204
	if @DOS= 141 set @WIN= 205
	if @DOS= 142 set @WIN= 206
	if @DOS= 143 set @WIN= 207
	if @DOS= 144 set @WIN= 208
	if @DOS= 145 set @WIN= 209
	if @DOS= 146 set @WIN= 210
	if @DOS= 147 set @WIN= 211
	if @DOS= 148 set @WIN= 212
	if @DOS= 149 set @WIN= 213
	if @DOS= 150 set @WIN= 214
	if @DOS= 151 set @WIN= 215
	if @DOS= 152 set @WIN= 216
	if @DOS= 153 set @WIN= 217
	if @DOS= 154 set @WIN= 218
	if @DOS= 155 set @WIN= 219
	if @DOS= 156 set @WIN= 220
	if @DOS= 157 set @WIN= 221
	if @DOS= 158 set @WIN= 222
	if @DOS= 159 set @WIN= 223
	if @DOS= 160 set @WIN= 224
	if @DOS= 161 set @WIN= 225
	if @DOS= 162 set @WIN= 226
	if @DOS= 163 set @WIN= 227
	if @DOS= 164 set @WIN= 228
	if @DOS= 165 set @WIN= 229
	if @DOS= 166 set @WIN= 230
	if @DOS= 167 set @WIN= 231
	if @DOS= 168 set @WIN= 232
	if @DOS= 169 set @WIN= 233
	if @DOS= 170 set @WIN= 234
	if @DOS= 171 set @WIN= 235
	if @DOS= 172 set @WIN= 236
	if @DOS= 173 set @WIN= 237
	if @DOS= 174 set @WIN= 238
	if @DOS= 175 set @WIN= 239
	if @DOS= 176 set @WIN= 32
	if @DOS= 177 set @WIN= 32
	if @DOS= 178 set @WIN= 32
	if @DOS= 179 set @WIN= 32
	if @DOS= 180 set @WIN= 32
	if @DOS= 181 set @WIN= 32
	if @DOS= 182 set @WIN= 32
	if @DOS= 183 set @WIN= 32
	if @DOS= 184 set @WIN= 32
	if @DOS= 185 set @WIN= 32
	if @DOS= 186 set @WIN= 32
	if @DOS= 187 set @WIN= 32
	if @DOS= 188 set @WIN= 32
	if @DOS= 189 set @WIN= 32
	if @DOS= 190 set @WIN= 32
	if @DOS= 191 set @WIN= 32
	if @DOS= 192 set @WIN= 32
	if @DOS= 193 set @WIN= 32
	if @DOS= 194 set @WIN= 32
	if @DOS= 195 set @WIN= 32
	if @DOS= 196 set @WIN= 32
	if @DOS= 197 set @WIN= 32
	if @DOS= 198 set @WIN= 32
	if @DOS= 199 set @WIN= 32
	if @DOS= 200 set @WIN= 32
	if @DOS= 201 set @WIN= 32
	if @DOS= 202 set @WIN= 32
	if @DOS= 203 set @WIN= 32
	if @DOS= 204 set @WIN= 32
	if @DOS= 205 set @WIN= 32
	if @DOS= 206 set @WIN= 32
	if @DOS= 207 set @WIN= 32
	if @DOS= 208 set @WIN= 32
	if @DOS= 209 set @WIN= 32
	if @DOS= 210 set @WIN= 32
	if @DOS= 211 set @WIN= 32
	if @DOS= 212 set @WIN= 32
	if @DOS= 213 set @WIN= 32
	if @DOS= 214 set @WIN= 32
	if @DOS= 215 set @WIN= 32
	if @DOS= 216 set @WIN= 32
	if @DOS= 217 set @WIN= 32
	if @DOS= 218 set @WIN= 32
	if @DOS= 219 set @WIN= 32
	if @DOS= 220 set @WIN= 32
	if @DOS= 221 set @WIN= 32
	if @DOS= 222 set @WIN= 32
	if @DOS= 223 set @WIN= 32
	if @DOS= 224 set @WIN= 240
	if @DOS= 225 set @WIN= 241
	if @DOS= 226 set @WIN= 242
	if @DOS= 227 set @WIN= 243
	if @DOS= 228 set @WIN= 244
	if @DOS= 229 set @WIN= 245
	if @DOS= 230 set @WIN= 246
	if @DOS= 231 set @WIN= 247
	if @DOS= 232 set @WIN= 248
	if @DOS= 233 set @WIN= 249
	if @DOS= 234 set @WIN= 250
	if @DOS= 235 set @WIN= 251
	if @DOS= 236 set @WIN= 252
	if @DOS= 237 set @WIN= 253
	if @DOS= 238 set @WIN= 254
	if @DOS= 239 set @WIN= 255
	if @DOS= 240 set @WIN= 168
	if @DOS= 241 set @WIN= 184
	if @DOS= 242 set @WIN= 178
	if @DOS= 243 set @WIN= 179
	if @DOS= 244 set @WIN= 32
	if @DOS= 245 set @WIN= 32
	if @DOS= 246 set @WIN= 175
	if @DOS= 247 set @WIN= 191
	if @DOS= 248 set @WIN= 170
	if @DOS= 249 set @WIN= 186
	if @DOS= 250 set @WIN= 32
	if @DOS= 251 set @WIN= 177
	if @DOS= 252 set @WIN= 185
	if @DOS= 253 set @WIN= 32
	if @DOS= 254 set @WIN= 32
	if @DOS= 255 set @WIN= 32
	set @i=@i+1
	set @str=@str+char(@WIN)
	end
	Return (@str)
END

Применение:
Update Table_
Set [NAME]=dbo.DOSTOWIN([NAME]) From Table_
Where ASCII (LEFT ([NAME],1))>122 AND ASCII (LEFT ([NAME],1))<192


Сообщение было отредактировано: 5 июл 11, 13:51
20 дек 04, 17:23    [1194430]     Ответить | Цитировать Сообщить модератору
 Re: функция OEM2ANSI (может кому пригодится)  [new]
ChA
Member

Откуда: Москва
Сообщений: 11316
Grigoriy
может кому пригодится

Владение Copy|Paste - 5
Программирование - 3-

P.S. Это теперь так учат программировать ? Грустно...
20 дек 04, 23:09    [1195129]     Ответить | Цитировать Сообщить модератору
 Re: функция OEM2ANSI (может кому пригодится)  [new]
Trong
Member

Откуда: Novosibirsk
Сообщений: 759
Так не лучше?
if exists (select * from sysobjects where name = 'CharDos2Win')
drop function CharDos2Win
go

create function CharDos2Win(@DosChar nchar(1))
returns nchar(1)
as begin
	if (ascii(@DosChar) < 33) or (ascii(@DosChar) > 175 and ascii(@DosChar) < 224) return char(32)
	if
		ascii(@DosChar) = 244 or
		ascii(@DosChar) = 245 or
		ascii(@DosChar) = 250 or
		ascii(@DosChar) = 253 or
		ascii(@DosChar) = 254 or
		ascii(@DosChar) = 255
	return char(32)

	if (ascii(@DosChar) > 32) and  (ascii(@DosChar) < 128) return @DosChar
	if (ascii(@DosChar) > 127) and (ascii(@DosChar) < 176) return char(ascii(@DosChar) + 64)
	if (ascii(@DosChar) > 223) and (ascii(@DosChar) < 240) return char(ascii(@DosChar) + 16)
	if (ascii(@DosChar) > 223) and (ascii(@DosChar) < 240) return char(ascii(@DosChar) + 16)

	if ascii(@DosChar) = 240 return(168)
	if ascii(@DosChar) = 241 return(184)
	if ascii(@DosChar) = 242 return(178)
	if ascii(@DosChar) = 243 return(179)
	if ascii(@DosChar) = 246 return(175)
	if ascii(@DosChar) = 247 return(191)
	if ascii(@DosChar) = 248 return(170)
	if ascii(@DosChar) = 249 return(186)
	if ascii(@DosChar) = 251 return(177)
	if ascii(@DosChar) = 252 return(185)

	return @DosChar
end
go


if exists (select * from sysobjects where name = 'CharDos2Win')
drop function Dos2Win
go

create function Dos2Win(@DosText nvarchar(4000))
returns nvarchar(4000)
as begin
	declare @i int, @str nvarchar(4000)
	set @i=0
	set @str=''
	while @i<=len(@DosText) begin
		set @i=@i+1
		set @str=@str+dbo.CharDos2Win(substring(@DosText,@i,1))
	end
	return (@str)
end
go
21 дек 04, 06:33    [1195280]     Ответить | Цитировать Сообщить модератору
 Re: функция OEM2ANSI (может кому пригодится)  [new]
Trong
Member

Откуда: Novosibirsk
Сообщений: 759
Trong

	if (ascii(@DosChar) > 223) and (ascii(@DosChar) < 240) return char(ascii(@DosChar) + 16)
	if (ascii(@DosChar) > 223) and (ascii(@DosChar) < 240) return char(ascii(@DosChar) + 16)

Владение Copy|Paste - 4 :))
21 дек 04, 06:35    [1195281]     Ответить | Цитировать Сообщить модератору
 Re: функция OEM2ANSI (может кому пригодится)  [new]
Crimean
Member

Откуда:
Сообщений: 13147
ТфоИшнЫкЫ...
Это через DLL надо решать и в UDF ее оборачивать.
Будет:
1) правильно
2) универсально
3) совместимо
4) быстро
5) красиво
А вызовы, оч возможно, через юникодные строки делать.
21 дек 04, 10:54    [1195698]     Ответить | Цитировать Сообщить модератору
 Re: функция OEM2ANSI (может кому пригодится)  [new]
Grigoriy
Member

Откуда: Краснодар
Сообщений: 1484
ChA
Grigoriy
может кому пригодится

Владение Copy|Paste - 5
Программирование - 3-
P.S. Это теперь так учат программировать ? Грустно...

Вам грустно и одиноко? Не хотите поговорить об этом?
ЗЫ Владение язвительностью - 5, умение читать - 2
23 дек 04, 16:45    [1205385]     Ответить | Цитировать Сообщить модератору
 Re: функция OEM2ANSI (может кому пригодится)  [new]
Grigoriy
Member

Откуда: Краснодар
Сообщений: 1484
Trong
Так не лучше?

А зачем разбивать на две функции? это не замедлит вызов?
23 дек 04, 16:48    [1205401]     Ответить | Цитировать Сообщить модератору
 Re: функция OEM2ANSI (может кому пригодится)  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5637
предлагаю все это завернуть в таблицу (соответствия) и дергать оттуда...

для спящего время бодрствования равносильно сну
23 дек 04, 16:49    [1205405]     Ответить | Цитировать Сообщить модератору
 Re: функция OEM2ANSI (может кому пригодится)  [new]
LR
Member

Откуда: 8P8C
Сообщений: 2423
это не замедлит вызов?
и
...
if @DOS= ...
if @DOS= ...
...
if @DOS= ...
if @DOS= ...
...
Return (@str)


Мне тоже грустно и одиноко... но говорить с Вами об этом не хочу...
23 дек 04, 17:04    [1205505]     Ответить | Цитировать Сообщить модератору
 Re: функция OEM2ANSI (может кому пригодится)  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5637
другое предложение... сделать хотя бы как индексы...
if @dos < 64 begin

end else if @dos < 128 begin
end...

для спящего время бодрствования равносильно сну
23 дек 04, 17:15    [1205580]     Ответить | Цитировать Сообщить модератору
 Re: функция OEM2ANSI (может кому пригодится)  [new]
д.Кока
Guest
тута ващета вместа if ... траляля ... CASE WHEN напрашивался :))
23 дек 04, 17:40    [1205689]     Ответить | Цитировать Сообщить модератору
 Re: функция OEM2ANSI (может кому пригодится)  [new]
Grigoriy
Member

Откуда: Краснодар
Сообщений: 1484
Case подойдет больше.
Я ж просто взял тело процедуры, превратил в фукцию.
Но если открытие темы так осуждается, но можете удалить ее. Я ж не знал, что все такие умные...
24 дек 04, 10:39    [1206784]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: функция OEM2ANSI (может кому пригодится)  [new]
DonySuXX
Member

Откуда:
Сообщений: 8
Grigoriy,

Спасибо. Пригодилось))) Вариант молодого человека выше - не работает. (тоесть работает, но не всегда)) на 402-й строчке из КЛАДР-а сообщил об ошибке
'Ошибка арифметического переполнения при преобразовании expression к типу данных nvarchar.'

....
Косихинский
Красногорский
Краснощёковский

)
1 май 11, 18:54    [10592791]     Ответить | Цитировать Сообщить модератору
 Re: функция OEM2ANSI (может кому пригодится)  [new]
Grigoriy
Member

Откуда: Краснодар
Сообщений: 1484
И отлично :)
5 июл 11, 13:19    [10924221]     Ответить | Цитировать Сообщить модератору
 Re: функция OEM2ANSI (может кому пригодится)  [new]
Flying-home
Member

Откуда: kart.vrostove.net
Сообщений: 15006
Ужас какой. Во времена 2000 я написал DLL на Дельфе с 1 строчкой кода и вызывал ее.
Сейчас это еще проще.
А тут поднимают заведомо неправильные советы 6-летней давности и радуются. Куда катится мир?
Может, модераторам стоит в таких топиках писать в красной рамочке "этот совет неправильный"?
5 июл 11, 17:00    [10926652]     Ответить | Цитировать Сообщить модератору
 Re: функция OEM2ANSI (может кому пригодится)  [new]
Grigoriy
Member

Откуда: Краснодар
Сообщений: 1484
Модераторам придется непросто - придется перелопатить и пометить 80% тем на форуме :)
Да и вам тоже - ведь только вы будете решать что правильно, а что нет
5 июл 11, 17:42    [10926981]     Ответить | Цитировать Сообщить модератору
 Re: функция OEM2ANSI (может кому пригодится)  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Flying-home
Во времена 2000 я написал DLL на Дельфе с 1 строчкой кода и вызывал ее.
Летало наверно!
Экая жуть.
5 июл 11, 19:47    [10927723]     Ответить | Цитировать Сообщить модератору
 Re: функция OEM2ANSI (может кому пригодится)  [new]
Flying-home
Member

Откуда: kart.vrostove.net
Сообщений: 15006
iap
Flying-home
Во времена 2000 я написал DLL на Дельфе с 1 строчкой кода и вызывал ее.
Летало наверно!
Экая жуть.

Что-то не так?
6 июл 11, 10:29    [10930005]     Ответить | Цитировать Сообщить модератору
 Re: функция OEM2ANSI (может кому пригодится)  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Flying-home
iap
пропущено...
Летало наверно!
Экая жуть.

Что-то не так?
Зачем использовать ESP там, где можно легко обойтись без неё?
Есть хоть одна причина?
6 июл 11, 10:38    [10930085]     Ответить | Цитировать Сообщить модератору
 Re: функция OEM2ANSI (может кому пригодится)  [new]
Flying-home
Member

Откуда: kart.vrostove.net
Сообщений: 15006
В 2000?
6 июл 11, 17:29    [10934223]     Ответить | Цитировать Сообщить модератору
 Re: функция OEM2ANSI (может кому пригодится)  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Flying-home
В 2000?
В 2000-м появились функции
6 июл 11, 17:37    [10934303]     Ответить | Цитировать Сообщить модератору
 Re: функция OEM2ANSI (может кому пригодится)  [new]
Flying-home
Member

Откуда: kart.vrostove.net
Сообщений: 15006
Extended procedure все равно быстрее, чем подобное описанному выше. Ну и правильнее, что ли, добрее...
6 июл 11, 17:54    [10934453]     Ответить | Цитировать Сообщить модератору
 Re: функция OEM2ANSI (может кому пригодится)  [new]
Andret
Member

Откуда: Киев
Сообщений: 84
Навёл красоту (на основе вашего примера):

create function dbo.fn_Dos2Win(@DosStr varchar(8000))
returns varchar(8000)
as
begin
	declare	@i	 smallint,
		@LenStr  smallint,
		@WinStr	 varchar(8000),
		@WinChar char(1),
		@DosCode smallint

	set	@i = 0
	set	@WinStr = ''
	set	@LenStr = isNull(len(@DosStr), 0)

	while	@i<= @LenStr - 1
	begin
		set	@i = @i + 1
		set	@DosCode = Ascii( SubString(@DosStr, @i, 1) )
		set	@WinChar =
			case
			when	(@DosCode < 33)
			or	(@DosCode > 175 and @DosCode < 224) 
			or	 @DosCode in (244, 245, 250, 253, 254, 255)
			then	char(32)
	
			when	(@DosCode > 32 and @DosCode < 128)
			then	char(@DosCode)
	
			when	(@DosCode > 127 and @DosCode < 176)
			then	char(@DosCode + 64)
	
			when	(@DosCode > 223 and @DosCode < 240)
			then	char(@DosCode + 16)
	
			when	 @DosCode = 240
			then	 char(168)
	
			when	 @DosCode = 241
			then	char(184)
	
			when	 @DosCode = 242
			then	char(178)
	
			when	 @DosCode = 243
			then	char(179)
	
			when	 @DosCode = 246
			then	char(175)
	
			when	 @DosCode = 247
			then	char(191)
	
			when	 @DosCode = 248
			then	char(170)
	
			when	 @DosCode = 249
			then	char(186)
	
			when	 @DosCode = 251
			then	char(177)
	
			when	 @DosCode = 252
			then	char(185)

			else	char(@DosCode)
			end

		set	@WinStr = @WinStr + isNull(@WinChar, ' ')
	end

	return @WinStr
end
go

Я бы не рекомендовал быть таким категоричным по поводу того, что правильно или неправильно делать в T-SQL.
Ведь задачу и решение надо рассматривать в контексте: например, какая версия сервера, для какой задачи, какие ограничения на развертывание решения (обновления).
В ряде сценариев подобные решения окажутся оптимальными.

Хотя, конечно, использовать пользовательские скалярные функции в SELECT|UPDATE плохая практика. Это с точки зрения производительности.

Кстати, можно ещё покапать недокументированные ODBC Scalar Functions. Может там что найти получится.
6 июл 11, 18:45    [10934753]     Ответить | Цитировать Сообщить модератору
 Re: функция OEM2ANSI (может кому пригодится)  [new]
Grigoriy
Member

Откуда: Краснодар
Сообщений: 1484
Ну вот и получили мы конфетку, спустя 7 лет после открытия темы :) Я тогда только сиквел осваивал, месяца 2 с ним работал.
Спасибо всем, думаю пригодится, теперь уж точно.
7 июл 11, 16:12    [10940051]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить