powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Можно ли проще ?
6 сообщений из 6, страница 1 из 1
Можно ли проще ?
    #32048427
Bob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bob
Гость
Уважаемые знатоки.
В колонке содержится текст типа 1+2+3. Надо это вычислить. Делаю так:

create table #A(i int, c varchar(100))
insert into #A(i,c) values(null,'1+2');
insert into #A(i,c) values(null,'10+20');

declare @i int, @c varchar(100), @csql nvarchar(100)
declare crs cursor for
select i, c from #A for update

open crs
fetch next from crs into @i,@c
while @@FETCH_STATUS = 0 begin
set @csql='set @i='+@c
exec sp_executesql @csql, N'@i int out', @i = @i out
update #A set i=@i where current of crs
fetch next from crs into @i,@c
end
close crs
deallocate crs

select * from #A
drop table #A

Можно ли проще?
...
Рейтинг: 0 / 0
Можно ли проще ?
    #32048614
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не знаю будет ли это быстрей, хотя почти уверен в этом, но можно строку можно представить в виде таблицы (вчера я в топике " опубликовал функцию "F_CODES_IN_TABLE". Остается только\r
Код: plaintext
select sum(field) from F_CODES_IN_TABLE()
.\r
Конечно если у Вас не только "+" функцию надо доработать. Ну и конечно надо тип поля "code" поменять.
...
Рейтинг: 0 / 0
Можно ли проще ?
    #32048626
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин теги расставил слегка непрваильно!!!-:). Короче все что синим это ссылка туда где есть эта функция.
...
Рейтинг: 0 / 0
Можно ли проще ?
    #32048638
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сомневаюсь, что будет быстрее, но короче точно :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create table #t1 (aa int, bb char( 10 ))
insert into #t1 values (Null,'1+1')
insert into #t1 values (Null,'10+10')

declare @cc char( 10 )

while exists(select * from #t1 where aa Is Null)
begin
	select top  1  @cc=bb from #t1 where aa Is Null
	execute ('update #t1 set aa='+@cc+' where bb="'+@cc+'"')
end

select * from #t1
drop table #t1


Ну и если в поле для выражения возможно значение Null или пустая строка, то перед циклом надо дать команду

Код: plaintext
update #t1 set aa= 0  where bb Is Null OR LEN(bb)= 0 
...
Рейтинг: 0 / 0
Можно ли проще ?
    #32048687
Фотография akuz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Написать расширенную процедуру которая делает вычисления по строке.
Затем описать функцию которая её вызывает.
Тогда можно будет прямо в один апдейт всё уложить.

У меня готовых решений такой задачи нет (пока не требовалось).
Но в принципе вещь полезная.
Ели бы кто поделился...
...
Рейтинг: 0 / 0
Можно ли проще ?
    #32048740
Bob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bob
Гость
Спасибо за участие
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Можно ли проще ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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