Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Инкрементное присвоение в SELECT  [new]
Сам никнейм
Guest
Есть табличка типа :
table1(
stringa nvarchar (300)
poryad_nomer int
)

table2
(
fio nvarchar (300)
)

Значения в table2 :

Вася Пупкин
Рулон Обоев
Петр Петров
Иван Иванов

Смысл в том что мне надо внести их в table1 с внесением poryad_nomer как номера записи SELECT.
То есть я думал как то так:

declare @ord int
set @ord = 0

INSERT INTO table1(stringa,poryad_nomer) select fio,@ord = @ord + 1 from table2 order by fio asc


Но не тут то было. Нельзя использовать присваивание в SELECT.


Подскажите что делать.

SQL 2008.
4 июл 13, 10:42    [14520699]     Ответить | Цитировать Сообщить модератору
 Re: Инкрементное присвоение в SELECT  [new]
Добрый Э - Эх
Guest
row_number() в MS SQL Server 2008 уже отменили?
4 июл 13, 10:44    [14520706]     Ответить | Цитировать Сообщить модератору
 Re: Инкрементное присвоение в SELECT  [new]
Сам никнейм
Guest
Добрый Э - Эх,


Неправильный синтаксис около "row_number()", ожидалось OVER
4 июл 13, 10:47    [14520727]     Ответить | Цитировать Сообщить модератору
 Re: Инкрементное присвоение в SELECT  [new]
Glory
Member

Откуда:
Сообщений: 104751
Сам никнейм
Неправильный синтаксис около "row_number()", ожидалось OVER

Ну так сделайте синтаксис правильным - дайте серверу то, что он ожидает
4 июл 13, 10:48    [14520734]     Ответить | Цитировать Сообщить модератору
 Re: Инкрементное присвоение в SELECT  [new]
Сам никнейм
Guest
Glory
Сам никнейм
Неправильный синтаксис около "row_number()", ожидалось OVER

Ну так сделайте синтаксис правильным - дайте серверу то, что он ожидает



Вместо

select fio,@ord = @ord + 1 from table2 order by fio asc


Поставил

select fio,row_number() from table2 order by fio asc



Что я сделал не так?
4 июл 13, 10:51    [14520742]     Ответить | Цитировать Сообщить модератору
 Re: Инкрементное присвоение в SELECT  [new]
Добрый Э - Эх
Guest
Сам никнейм
Glory
пропущено...

Ну так сделайте синтаксис правильным - дайте серверу то, что он ожидает



Вместо

select fio,@ord = @ord + 1 from table2 order by fio asc


Поставил

select fio,row_number() over(order by fio) from table2



Что я сделал не так?
4 июл 13, 10:52    [14520747]     Ответить | Цитировать Сообщить модератору
 Re: Инкрементное присвоение в SELECT  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Сам никнейм
Есть табличка типа :
table1(
stringa nvarchar (300)
poryad_nomer int
)

table2
(
fio nvarchar (300)
)

Значения в table2 :

Вася Пупкин
Рулон Обоев
Петр Петров
Иван Иванов

Смысл в том что мне надо внести их в table1 с внесением poryad_nomer как номера записи SELECT.
То есть я думал как то так:

declare @ord int
set @ord = 0

INSERT INTO table1(stringa,poryad_nomer) select fio,@ord = @ord + 1 from table2 order by fio asc


Но не тут то было. Нельзя использовать присваивание в SELECT.


Подскажите что делать.

SQL 2008.

Если задача стоит тупо проставить номера, то сделайте столбец poryad_nomer IDENTITY.
4 июл 13, 10:52    [14520748]     Ответить | Цитировать Сообщить модератору
 Re: Инкрементное присвоение в SELECT  [new]
Glory
Member

Откуда:
Сообщений: 104751
Сам никнейм
Что я сделал не так?

Не читаете описание синтаксиса
4 июл 13, 10:53    [14520751]     Ответить | Цитировать Сообщить модератору
 Re: Инкрементное присвоение в SELECT  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
Сам никнейм
Неправильный синтаксис около "row_number()", ожидалось OVER
http://social.msdn.microsoft.com/Search/en-US?query=row_number()&ac=2
4 июл 13, 11:01    [14520798]     Ответить | Цитировать Сообщить модератору
 Re: Инкрементное присвоение в SELECT  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Сам никнейм
Glory
пропущено...

Ну так сделайте синтаксис правильным - дайте серверу то, что он ожидает



Вместо

select fio,@ord = @ord + 1 from table2 order by fio asc


Поставил

select fio,row_number() from table2 order by fio asc



Что я сделал не так?

row_number() - это оконная функция. Задайте ему окно в пределах которого оно будет считать и порядок подсчета.
4 июл 13, 11:10    [14520858]     Ответить | Цитировать Сообщить модератору
 Re: Инкрементное присвоение в SELECT  [new]
AnyKey45
Member

Откуда: Ekaterinburg-Moscow-EU
Сообщений: 219
если с оконными тяжко, может динамика?
типа:
@ord = @ord + 1
exec sql_execute "INSERT INTO table1(stringa,poryad_nomer) select fio,'+@ord+' from table2 order by fio asc"
4 июл 13, 11:14    [14520881]     Ответить | Цитировать Сообщить модератору
 Re: Инкрементное присвоение в SELECT  [new]
iiyama
Member

Откуда:
Сообщений: 642
я понимаю что доки читать нынче не в моде, но FAQ почитать то уж можно. Люди старались, может начнем уже уважать чужой труд
4 июл 13, 11:36    [14521056]     Ответить | Цитировать Сообщить модератору
 Re: Инкрементное присвоение в SELECT  [new]
Сам никнейм
Guest
Спасибо всем! Вызывали по работе - не мог ответить.

Прочёл статью по row_number() over (). Осознал, исправился.

Спасибо, добрые люди, что вы есть! :)
4 июл 13, 12:29    [14521457]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить