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

Откуда:
Сообщений: 4
Есть табличка, в ней поле забитое всякой не нужной информацией
как проставить туда числа например от 1 до КОНЦА таблицы ?
нужно что то типа update в цикле , как такое сделать ?
20 июл 05, 04:42    [1718482]     Ответить | Цитировать Сообщить модератору
 Re: Как автоматом проставить в поле цифры  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
не совсем понял суть вопроса
проще нужно и люди к вам потянуться :)
могет так
declare @table table(id integer, badfield varchar(10))
insert into @table values(1,'tratatata')
insert into @table values(2,'kukukuku')
insert into @table values(4,'mumuumumu')
insert into @table values(8,'gagagaga')

select * from @table

-- если есть ключевое поле
update t set t.badfield = (select count(*)+1 from @table where id < t.id)
from @table t 

select * from @table

-- или если нет ключевого поля 
update t set t.badfield = (select count(*)+1 from @table where badfield < t.Badfield)
from @table t 

select * from @table
order by badfield
20 июл 05, 06:09    [1718504]     Ответить | Цитировать Сообщить модератору
 Re: Как автоматом проставить в поле цифры  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
declare @table table(id integer, badfield varchar(10))
declare @i int
insert into @table values(1,'tratatata')
insert into @table values(2,'kukukuku')
insert into @table values(4,'mumuumumu')
insert into @table values(8,'gagagaga')

set @i=-1

update @table set @i = @i + 1, badfield = cast(@i + 1 as varchar)

select * from @table
20 июл 05, 06:32    [1718511]     Ответить | Цитировать Сообщить модератору
 Re: Как автоматом проставить в поле цифры  [new]
5m5m5m
Member

Откуда:
Сообщений: 4
Спасибо большое прокатило!!!
declare @i int
set @i=0
update proba set aaa = (select @i=@i+1)
а почему так не прокатывает ?
20 июл 05, 06:51    [1718520]     Ответить | Цитировать Сообщить модератору
 Re: Как автоматом проставить в поле цифры  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
5m5m5m
Спасибо большое прокатило!!!
declare @i int
set @i=0
update proba set aaa = (select @i=@i+1)
а почему так не прокатывает ?
А что говорит то? Уж случаем не "ncorrect syntax near '='." ?
20 июл 05, 07:06    [1718536]     Ответить | Цитировать Сообщить модератору
 Re: Как автоматом проставить в поле цифры  [new]
VladRUS.ca
Member

Откуда: Toronto
Сообщений: 1172
To tpg:
А почему не просто:
...
set @i=0
update @table set @i = @i + 1, badfield = @i
...
20 июл 05, 07:08    [1718537]     Ответить | Цитировать Сообщить модератору
 Re: Как автоматом проставить в поле цифры  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
VladRUS.ca
To tpg:
А почему не просто:
...
set @i=0
update @table set @i = @i + 1, badfield = @i
...
Перемудрил
Но, все же явное преобразование я б оставил от греха...
20 июл 05, 07:27    [1718564]     Ответить | Цитировать Сообщить модератору
 Re: Как автоматом проставить в поле цифры  [new]
5m5m5m
Member

Откуда:
Сообщений: 4
tpg
5m5m5m
Спасибо большое прокатило!!!
declare @i int
set @i=0
update proba set aaa = (select @i=@i+1)
а почему так не прокатывает ?
А что говорит то? Уж случаем не "ncorrect syntax near '='." ?


ага вот это и говорит
20 июл 05, 07:32    [1718572]     Ответить | Цитировать Сообщить модератору
 Re: Как автоматом проставить в поле цифры  [new]
VladRUS.ca
Member

Откуда: Toronto
Сообщений: 1172
Off:

Странно почему
set @i=0
update @table set @i = @i + 1, badfield = @i
и
set @i=0
update @table set badfield = @i, @i = @i + 1

приводит к одному и томуже результату, хотя в первом случае Pre Increment а во втором Post Increment
20 июл 05, 08:10    [1718642]     Ответить | Цитировать Сообщить модератору
 Re: Как автоматом проставить в поле цифры  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
VladRUS.ca
Off:

Странно почему
set @i=0
update @table set @i = @i + 1, badfield = @i
и
set @i=0
update @table set badfield = @i, @i = @i + 1

приводит к одному и томуже результату, хотя в первом случае Pre Increment а во втором Post Increment
По всей видимости потому, что вычисление выражения всегда идет первым перед апдейтом поля если это явно не прописано. Во всяком случае в BOL обратного не утверждалось.
Вот если б badfield был целого типа, то тогда бы можно было явно прописать @i = badfield = @i + 1.
20 июл 05, 08:25    [1718657]     Ответить | Цитировать Сообщить модератору
 Re: Как автоматом проставить в поле цифры  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
5m5m5m
tpg
5m5m5m
Спасибо большое прокатило!!!
declare @i int
set @i=0
update proba set aaa = (select @i=@i+1)
а почему так не прокатывает ?
А что говорит то? Уж случаем не "ncorrect syntax near '='." ?


ага вот это и говорит
Ну, это ж и переводится - неправильный синтаксис, значит - нельзя так писать.
20 июл 05, 08:26    [1718662]     Ответить | Цитировать Сообщить модератору
 Re: Как автоматом проставить в поле цифры  [new]
VladRUS.ca
Member

Откуда: Toronto
Сообщений: 1172
tpg
Вот если б badfield был целого типа, то тогда бы можно было явно прописать @i = badfield = @i + 1

Скорее наоборот, если @i типа varchar(10) то тогда работает:
declare @i varchar(10)
set @i=0
update @table set @i = badfield = cast(@i as int) + 1
20 июл 05, 08:52    [1718705]     Ответить | Цитировать Сообщить модератору
 Re: Как автоматом проставить в поле цифры  [new]
VladRUS.ca
Member

Откуда: Toronto
Сообщений: 1172
Или даже так:
declare @i varchar(10)
set @i=0
update @table set @i = badfield = @i + 1
20 июл 05, 08:54    [1718708]     Ответить | Цитировать Сообщить модератору
 Re: Как автоматом проставить в поле цифры  [new]
5m5m5m
Member

Откуда:
Сообщений: 4
Вобщем всем большое спасибо !!!! Все получилось !!!
20 июл 05, 08:58    [1718724]     Ответить | Цитировать Сообщить модератору
 Re: Как автоматом проставить в поле цифры  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541

tpg
По всей видимости потому, что вычисление выражения всегда идет первым перед апдейтом поля если это явно не
прописано

Вообще у update нечеткая логика - артифактов немеряно. Например:
declare @table table(id integer, badfield int)
insert into @table values(1, null)
insert into @table values(2, null)
insert into @table values(4, null)
insert into @table values(8, null)

declare @i int
set @i=0
update @table set @i = badfield = @i + 1, @i = @i
-- или так:
-- update @table set @i = badfield = @i + 1, @i = 100

select * from @table


Posted via ActualForum NNTP Server 1.2

20 июл 05, 09:06    [1718742]     Ответить | Цитировать Сообщить модератору
 Re: Как автоматом проставить в поле цифры  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541

set nocount on
go
select @@version
go
declare @table table(id integer, badfield int, unique (id, badfield) )

insert into @table values(1, null)
insert into @table values(2, null)
insert into @table values(4, null)
insert into @table values(8, null)

declare @i int
set @i=0
update @table set @i = badfield = @i + 1, @i = @i

select * from @table
go

----------------
Microsoft SQL Server  2000 - 8.00.760 (Intel X86) 
 Dec 17 2002 14:22:05 
 Copyright (c) 1988-2003 Microsoft Corporation
 Enterprise Edition on Windows NT 5.0 (Build 2195: Service Pack 4)


id          badfield
----------- -----------
1           1
2           2
4           3
8           4

----------------
Microsoft SQL Server 2005 - 9.00.1116 (Intel X86) 
 Apr  9 2005 20:56:37 
 Copyright (c) 1988-2004 Microsoft Corporation
 Beta Edition on Windows NT 5.1 (Build 2600: Service Pack 2)


id          badfield
----------- -----------
1           1
2           2
4           2
8           2

Posted via ActualForum NNTP Server 1.2

20 июл 05, 09:29    [1718809]     Ответить | Цитировать Сообщить модератору
 Re: Как автоматом проставить в поле цифры  [new]
VladRUS.ca
Member

Откуда: Toronto
Сообщений: 1172
Roman S. Golubin

tpg
По всей видимости потому, что вычисление выражения всегда идет первым перед апдейтом поля если это явно не
прописано

Вообще у update нечеткая логика - артифактов немеряно. Например:
declare @table table(id integer, badfield int)
insert into @table values(1, null)
insert into @table values(2, null)
insert into @table values(4, null)
insert into @table values(8, null)

declare @i int
set @i=0
update @table set @i = badfield = @i + 1, @i = @i
-- или так:
-- update @table set @i = badfield = @i + 1, @i = 100

select * from @table


Posted via ActualForum NNTP Server 1.2


Пожалуй очень даже чёткая.
Производится расчет выражения всей строки с лева направа а потом присвоение результата полю, независомо от его места в выражении:
declare @table table(id integer, badfield varchar(10))
declare @i int
insert into @table values(1,null)
insert into @table values(2,null)
insert into @table values(4,null)
insert into @table values(8,null)

set @i=0
update @table set @i = @i + 1, @i = 2*@i, badfield = @i 
select * from @table

set @i=0
update @table set  badfield = @i, @i = @i + 1, @i = 2*@i
select * from @table

set @i=0
update @table set  @i = @i + 1, badfield = @i, @i = 2*@i
select * from @table

set @i=0
update @table set @i = 2*@i, @i = @i + 1, badfield = @i 
select * from @table

set @i=0
update @table set badfield = @i, @i = 2*@i, @i = @i + 1  
select * from @table

set @i=0
update @table set @i = 2*@i, badfield = @i, @i = @i + 1  
select * from @table
20 июл 05, 09:30    [1718814]     Ответить | Цитировать Сообщить модератору
 Re: Как автоматом проставить в поле цифры  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
VladRUS.ca
Пожалуй очень даже чёткая.
Производится расчет выражения всей строки с лева направа а потом присвоение результата полю, независомо от его места в выражении
Согласен.
declare @t table(i integer, j int)

insert into @t values(1, 2)
insert into @t values(3, 4)

select * from @t

update @t set i = j, j = i

select * from @t
20 июл 05, 09:37    [1718829]     Ответить | Цитировать Сообщить модератору
 Re: Как автоматом проставить в поле цифры  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541

А как тогда такой пример:

set nocount on
go
select @@version
go
declare @table table(
    id integer,
    badfield int)

insert @table
select 1, null union all
select 2, null union all
select 3, null union all
select 8, null

declare @i int
set @i=0
update @table set @i = badfield = @i + 1

select * from @table
go
declare @table1 table(
    id integer,
    badfield int,
    unique(id, badfield))

insert @table1
select 1, null union all
select 2, null union all
select 3, null union all
select 8, null

declare @i int
set @i=0
update @table1 set @i = badfield = @i + 1

select * from @table1
go

-----------------------
Microsoft SQL Server 2005 - 9.00.1116 (Intel X86)
 Apr  9 2005 20:56:37
 Copyright (c) 1988-2004 Microsoft Corporation
 Beta Edition on Windows NT 5.1 (Build 2600: Service Pack 2)

id          badfield
----------- -----------
1           1
2           2
3           3
8           4

id          badfield
----------- -----------
1           1
2           3
3           5
8           7


Posted via ActualForum NNTP Server 1.2

20 июл 05, 09:54    [1718870]     Ответить | Цитировать Сообщить модератору
 Re: Как автоматом проставить в поле цифры  [new]
VladRUS.ca
Member

Откуда: Toronto
Сообщений: 1172
declare @table table(id integer, badfield int)
declare @i int
insert into @table values(1,null)
insert into @table values(2,null)
insert into @table values(4,null)
insert into @table values(8,null)

set @i=0
update @table set @i = badfield = @i + 1, @i = 2*@i -- !!! а потом присвоение результата полю вычисленного выражения 
select * from @table

set @i=0
update @table set badfield = @i, @i = @i + 1, @i = 2*@i
select * from @table
20 июл 05, 09:55    [1718874]     Ответить | Цитировать Сообщить модератору
 Re: Как автоматом проставить в поле цифры  [new]
VladRUS.ca
Member

Откуда: Toronto
Сообщений: 1172
Roman S. Golubin
А как тогда такой пример:
...

Microsoft SQL Server  2000 - 8.00.2039 (Intel X86) 
	May  3 2005 23:18:38 
	Copyright (c) 1988-2003 Microsoft Corporation
	Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 2)
Оба результата одинаковы
20 июл 05, 17:06    [1721694]     Ответить | Цитировать Сообщить модератору
 Re: Как автоматом проставить в поле цифры  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541

В 2000-ке все нормально. Траблы в 2005-м

Posted via ActualForum NNTP Server 1.2

20 июл 05, 17:07    [1721701]     Ответить | Цитировать Сообщить модератору
 Re: Как автоматом проставить в поле цифры  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37100
Roman S. Golubin

В 2000-ке все нормально. Траблы в 2005-м

Posted via ActualForum NNTP Server 1.2

Ну так, у 2005 тоже не один билд.
https://www.sql.ru/forum/actualthread.aspx?tid=201610#1720887
20 июл 05, 17:10    [1721718]     Ответить | Цитировать Сообщить модератору
 Re: Как автоматом проставить в поле цифры  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541

Блин, выше читайте - select @@version приведен...

Posted via ActualForum NNTP Server 1.2

20 июл 05, 17:12    [1721728]     Ответить | Цитировать Сообщить модератору
 Re: Как автоматом проставить в поле цифры  [new]
VladRUS.ca
Member

Откуда: Toronto
Сообщений: 1172
Гавриленко Сергей Алексеевич
Roman S. Golubin

В 2000-ке все нормально. Траблы в 2005-м

Posted via ActualForum NNTP Server 1.2

Ну так, у 2005 тоже не один билд.
https://www.sql.ru/forum/actualthread.aspx?tid=201610#1720887

Спасибо! Значит ребята работают!
20 июл 05, 17:27    [1721807]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить