Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Упражнение по SQL для студентов  [new]
muk07
Member

Откуда: Челябинск
Сообщений: 1842
Тема КУРСОР SQL Server2000.
Имеется таблица City(City_ID,CityName)
Требуется:
1) добавить в таблицу поле Nomer int null
2) пронумеровать записи по возрастанию CityName

--я пишу:
alter table City add Nomer int null
go 
declare @i int,@City_ID int 
declare ps cursor local forward_only for
  select City_ID from City order by CityName
set @i=1
open ps
while 1=1 begin
  fetch next from ps into @City_ID
  if @@fetch_status<>0 break
  update City set Nomer=@i where City_ID=@City_ID
  set @i=@i+1
end
close ps
deallocate ps

Получаю реакцию:
SERVER
Server: Msg 207, Level 16, State 1, Line 9
Invalid column name 'Nomer'.


Вопрос: на какой козе это объехать (не меняя текста)
1 июн 09, 15:03    [7251690]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение по SQL для студентов  [new]
RENaissance
Member

Откуда: Муром->Москва
Сообщений: 10895

Упражнения надо выполнять самому (с)

Posted via ActualForum NNTP Server 1.4

1 июн 09, 15:12    [7251739]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение по SQL для студентов  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> Получаю реакцию:
> SERVER
> Server: Msg 207, Level 16, State 1, Line 9
> Invalid column name 'Nomer'.
>
> Вопрос: на какой козе это объехать (не меняя текста)

там точно go после alter есть?

Posted via ActualForum NNTP Server 1.4

1 июн 09, 15:13    [7251748]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение по SQL для студентов  [new]
muk07
Member

Откуда: Челябинск
Сообщений: 1842
Лучше не отвечать на вопрос вообще, если вам нечего сказать.
Я и есть преподаватель, составляющий упражнения.
1 июн 09, 15:16    [7251773]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение по SQL для студентов  [new]
muk07
Member

Откуда: Челябинск
Сообщений: 1842
точно GO есть
1 июн 09, 15:16    [7251778]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение по SQL для студентов  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> точно GO есть

у меня прекрасно работает все:
use tempdb
go
create table City (City_ID int, CityName varchar(100))
insert into City values (5, 'asdf')
insert into City values (1, 'bbbbb')
go
alter table City add Nomer int null
go
declare @i int,@City_ID int
declare ps cursor local forward_only for
   select City_ID from City order by CityName
set @i=1
open ps
while 1=1 begin
   fetch next from ps into @City_ID
   if @@fetch_status<>0 break
   update City set Nomer=@i where City_ID=@City_ID
   set @i=@i+1
end
close ps
deallocate ps
go
select * from City
go
drop table City

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.2 (Build 3790: Service Pack 2)

Posted via ActualForum NNTP Server 1.4

1 июн 09, 15:19    [7251803]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение по SQL для студентов  [new]
ChA
Member

Откуда: Москва
Сообщений: 10991
Collation ?
1 июн 09, 15:22    [7251825]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение по SQL для студентов  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
muk07
Я и есть преподаватель, составляющий упражнения.


Мдя... А потом мы удивляемся, что у нас студенты ничего не знают...

CREATE TABLE City(City_ID  int identity(1, 1) PRIMARY KEY, CityName sysname)
GO

INSERT City(CityName) SELECT TOP 100 name FROM sysobjects
GO

ALTER TABLE City ADD Number int
GO
WITH CTE1(City_ID, Number)
AS
(
SELECT
  City_ID,
  ROW_NUMBER() OVER (ORDER BY CityName) AS Number
FROM
  City
)
UPDATE
  C
SET
  Number = CTE1.Number
FROM
  CTE1
  INNER JOIN City C ON
  CTE1.City_ID = C.City_ID
GO

SELECT * FROM City
GO

DROP TABLE City
1 июн 09, 15:26    [7251849]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение по SQL для студентов  [new]
muk07
Member

Откуда: Челябинск
Сообщений: 1842
Ваш текст у меня тоже работает.
Возвращаемся к исходному вопросу: почему не работает мой.
Ясно, что выполняя анализ всего текста до выполнения, сервер не находит
поля Nomer.
Не работает потому что весь этот текст включен в транзакцию.
begin tran
..............
rollback tran
1 июн 09, 15:29    [7251867]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение по SQL для студентов  [new]
stimpi
Member

Откуда: Киев, Украина
Сообщений: 662
так быстрее
declare @i int
set @i = 0
update [Table]
set [Column] = @i, @i = @i + 1
1 июн 09, 15:29    [7251869]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение по SQL для студентов  [new]
muk07
Member

Откуда: Челябинск
Сообщений: 1842
Но почему?
1 июн 09, 15:29    [7251870]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение по SQL для студентов  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
pkarklin,

тема - "Курсор", скуль2000
так шта....
1 июн 09, 15:30    [7251872]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение по SQL для студентов  [new]
muk07
Member

Откуда: Челябинск
Сообщений: 1842
я не тороплюсь
1 июн 09, 15:30    [7251877]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение по SQL для студентов  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
stimpi
так быстрее
declare @i int
set @i = 0
update [Table]
set [Column] = @i, @i = @i + 1

Гарантии о порядке обновления - есть? Или как попало пронумерует?
1 июн 09, 15:31    [7251879]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение по SQL для студентов  [new]
muk07
Member

Откуда: Челябинск
Сообщений: 1842
автор
pkarklin,

тема - "Курсор", скуль2000
так шта....

А если первести на русский?
1 июн 09, 15:31    [7251887]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение по SQL для студентов  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2549
pkarklin
muk07
Я и есть преподаватель, составляющий упражнения.


Мдя... А потом мы удивляемся, что у нас студенты ничего не знают...

CREATE TABLE City(City_ID  int identity(1, 1) PRIMARY KEY, CityName sysname)
GO

INSERT City(CityName) SELECT TOP 100 name FROM sysobjects
GO

ALTER TABLE City ADD Number int
GO
WITH CTE1(City_ID, Number)
AS
(
SELECT
  City_ID,
  ROW_NUMBER() OVER (ORDER BY CityName) AS Number
FROM
  City
)
UPDATE
  C
SET
  Number = CTE1.Number
FROM
  CTE1
  INNER JOIN City C ON
  CTE1.City_ID = C.City_ID
GO

SELECT * FROM City
GO

DROP TABLE City

дико извиняюсь, но у автора 2000... А так - оптимально, пожалуй...
1 июн 09, 15:31    [7251890]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение по SQL для студентов  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
muk07
Ваш текст у меня тоже работает.
Возвращаемся к исходному вопросу: почему не работает мой.
Ясно, что выполняя анализ всего текста до выполнения, сервер не находит
поля Nomer.
Не работает потому что весь этот текст включен в транзакцию.
begin tran
..............
rollback tran

А можно текст запроса целиком, а не вот такими кусочками, а?
Мало ли, еще какие подробности всплывут...
1 июн 09, 15:32    [7251891]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение по SQL для студентов  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
muk07
Ваш текст у меня тоже работает.
Возвращаемся к исходному вопросу: почему не работает мой.
Ясно, что выполняя анализ всего текста до выполнения, сервер не находит
поля Nomer.
Не работает потому что весь этот текст включен в транзакцию.
begin tran
..............
rollback tran


Не работать может только в одном случае - если все это выполняется в одном пакете. Вы же утверждаете, что у Вас стоит GO. Теперь еще и транзакции всплыли. М.б. Вы приведете полный вариант скрипта, кторый у Вас дает ошибку?
1 июн 09, 15:32    [7251897]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение по SQL для студентов  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
PaulYoung
дико извиняюсь, но у автора 2000... А так - оптимально, пожалуй...

У автора не пойми что.
Тема - "курсоры на 2000", а CTE - кушает на ура.
Видимо, запускает на 2005.
1 июн 09, 15:32    [7251899]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение по SQL для студентов  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
PaulYoung

дико извиняюсь, но у автора 2000... А так - оптимально, пожалуй...


Я то же извиняюсь, но автору стоит задуматься, стоит ли в 2009 году при наличии 2005 и 2008 версий обучать студентов на 2000.
1 июн 09, 15:33    [7251908]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение по SQL для студентов  [new]
stimpi
Member

Откуда: Киев, Украина
Сообщений: 662
locky
Гарантии о порядке обновления - есть? Или как попало пронумерует?

ничего о порядке не было сказано
1 июн 09, 15:33    [7251910]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение по SQL для студентов  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> Ваш текст у меня тоже работает.
> Возвращаемся к исходному вопросу: почему не работает мой.
> Ясно, что выполняя анализ всего текста до выполнения, сервер не находит
> поля Nomer.
> Не работает потому что весь этот текст включен в транзакцию.
> begin tran
> ..............
> rollback tran

мой текст от вашего отличается только созданием и заполнением
таблицы City (на tempdb можно и не переходить).
поэтому, хотелось бы все-таки увидеть ваш текст - тот, который
выдает ошибку. полностью - с созданием и заполнением таблицы.

Posted via ActualForum NNTP Server 1.4

1 июн 09, 15:34    [7251918]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение по SQL для студентов  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
stimpi
locky
Гарантии о порядке обновления - есть? Или как попало пронумерует?

ничего о порядке не было сказано

"2) пронумеровать записи по возрастанию CityName" (С)
1 июн 09, 15:35    [7251922]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение по SQL для студентов  [new]
stimpi
Member

Откуда: Киев, Украина
Сообщений: 662
упс =)
1 июн 09, 15:35    [7251931]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение по SQL для студентов  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
locky
pkarklin,

тема - "Курсор", скуль2000
так шта....


Ну фу...

while 1=1 begin
  fetch next from ps into @City_ID
  if @@fetch_status<>0 break
1 июн 09, 15:38    [7251942]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить