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

Откуда:
Сообщений: 47
Добрый день!

Я применяю следующую T-SQL команду на MS SQL 2000.

Update @Duplicates
SET 
  @GroupID = GroupID = 
  CASE 
    WHEN HasPhones=1 THEN @GroupID+1
	 	ELSE
			@GroupID
	END

Скажите пожалуйста, будет ли такая конструкция действовать при переходе
на MS SQL 2005 и дальше, на MS SQL 2008?
12 янв 10, 11:46    [8169999]     Ответить | Цитировать Сообщить модератору
 Re: Будет ли действовать такая конструкция в SQL2005, SQL2008?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
А вас что-то смущает?
12 янв 10, 11:49    [8170017]     Ответить | Цитировать Сообщить модератору
 Re: Будет ли действовать такая конструкция в SQL2005, SQL2008?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Вы про синтаксис или про конечный резултат, который получится в таблице ?
12 янв 10, 11:49    [8170020]     Ответить | Цитировать Сообщить модератору
 Re: Будет ли действовать такая конструкция в SQL2005, SQL2008?  [new]
Филипп Вульфович
Member

Откуда:
Сообщений: 47
Меня смущает, будет ли это вообще запускаться.
12 янв 10, 11:50    [8170028]     Ответить | Цитировать Сообщить модератору
 Re: Будет ли действовать такая конструкция в SQL2005, SQL2008?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Филипп Вульфович
Меня смущает, будет ли это вообще запускаться.
Почему нет?
12 янв 10, 11:51    [8170037]     Ответить | Цитировать Сообщить модератору
 Re: Будет ли действовать такая конструкция в SQL2005, SQL2008?  [new]
Филипп Вульфович
Member

Откуда:
Сообщений: 47
tpg
Почему нет?

Ну а вдруг они отменили этот синтаксис, что можно одновременно присваивать полю в таблице и потом переменной?

И с другой стороны интересно. Будет ли сервер также последовательно обрабатывать записи?
Так как здесь вычисление полей зависит от порядка обхода таблицы.
12 янв 10, 11:53    [8170049]     Ответить | Цитировать Сообщить модератору
 Re: Будет ли действовать такая конструкция в SQL2005, SQL2008?  [new]
msLex
Member

Откуда:
Сообщений: 7894
Филипп Вульфович
И с другой стороны интересно. Будет ли сервер также последовательно обрабатывать записи?
Так как здесь вычисление полей зависит от порядка обхода таблицы.

Чисто теоретически порядок обхода не гарантирован и в MS SQL 2000 и 2005 и 2008. На практике кластерный индекс по полю сортировки должен давать нужный результат, но, повторюсь, гарантий ни каких нет.
12 янв 10, 11:58    [8170075]     Ответить | Цитировать Сообщить модератору
 Re: Будет ли действовать такая конструкция в SQL2005, SQL2008?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Филипп Вульфович
Будет ли сервер также последовательно обрабатывать записи?
Так как здесь вычисление полей зависит от порядка обхода таблицы.
А что, в 2000 обход как-то документирован? Ссылочку можно?
12 янв 10, 11:58    [8170078]     Ответить | Цитировать Сообщить модератору
 Re: Будет ли действовать такая конструкция в SQL2005, SQL2008?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Филипп Вульфович
tpg
Почему нет?

Ну а вдруг они отменили этот синтаксис, что можно одновременно присваивать полю в таблице и потом переменной?

Для этого просто достаточно открыть хелп с синтаксисом команды UPDATE для каждой версии

Филипп Вульфович

И с другой стороны интересно. Будет ли сервер также последовательно обрабатывать записи?
Так как здесь вычисление полей зависит от порядка обхода таблицы.

А вот тут интереснее всего - а как вы в MS SQL 2000 гарантировали нужный порядок обработки записей ?
12 янв 10, 11:59    [8170085]     Ответить | Цитировать Сообщить модератору
 Re: Будет ли действовать такая конструкция в SQL2005, SQL2008?  [new]
Филипп Вульфович
Member

Откуда:
Сообщений: 47
Glory
А вот тут интереснее всего - а как вы в MS SQL 2000 гарантировали нужный порядок обработки записей ?


Никак. Просто так получается. :)
12 янв 10, 12:00    [8170098]     Ответить | Цитировать Сообщить модератору
 Re: Будет ли действовать такая конструкция в SQL2005, SQL2008?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36820
Филипп Вульфович
Glory
А вот тут интереснее всего - а как вы в MS SQL 2000 гарантировали нужный порядок обработки записей ?


Никак. Просто так получается. :)
А чего будете делать, когда перестанет?
12 янв 10, 12:01    [8170104]     Ответить | Цитировать Сообщить модератору
 Re: Будет ли действовать такая конструкция в SQL2005, SQL2008?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Филипп Вульфович
Glory
А вот тут интереснее всего - а как вы в MS SQL 2000 гарантировали нужный порядок обработки записей ?


Никак. Просто так получается. :)

Т.е. случайный результат - это то, к чему вы стремитесь ?
12 янв 10, 12:01    [8170105]     Ответить | Цитировать Сообщить модератору
 Re: Будет ли действовать такая конструкция в SQL2005, SQL2008?  [new]
msLex
Member

Откуда:
Сообщений: 7894
Филипп Вульфович
Никак. Просто так получается. :)

кажется это называется "Рулетка".
12 янв 10, 12:01    [8170107]     Ответить | Цитировать Сообщить модератору
 Re: Будет ли действовать такая конструкция в SQL2005, SQL2008?  [new]
Филипп Вульфович
Member

Откуда:
Сообщений: 47
msLex,Glory,Гавриленко Сергей Алексеевич,

Признаю, похоже так действительно нельзя делать.

Тогда подскажите, как решить задачу по другому?
У меня есть таблица:

DECLARE @Duplicates TABLE
(
  ID INT Identity(1,1) Primary Key,
  profile_id INT,
  FullName VarChar(255),
  GroupID Int,
  Phone1 VarChar(255),
  Phone2 VarChar(255),
  Phone3 VarChar(255),
  Phone4 VarChar(255),
  HasPhones INT
)

В нее помещаются записи (информация о гостях). Возможно есть дубликаты, т.е. записи,
с совпадающими FullName и одним из телефонов Phone1..Phone4.
profile_id - уникальное поле для каждой записи.
Мне нужно, чтобы GroupID хранило некоторый уникальный идентификатор группы дубликатов.
Т.е. чтобы все дубликаты имели одинаковый GroupID.
Можно взять MIN(profile_id) конечно. Но я хочу чтобы GroupID был как-бы "пронумерован" по порядку.
12 янв 10, 12:11    [8170163]     Ответить | Цитировать Сообщить модератору
 Re: Будет ли действовать такая конструкция в SQL2005, SQL2008?  [new]
msLex
Member

Откуда:
Сообщений: 7894
Филипп Вульфович
msLex,Glory,Гавриленко Сергей Алексеевич,

Признаю, похоже так действительно нельзя делать.

Тогда подскажите, как решить задачу по другому?
У меня есть таблица:

DECLARE @Duplicates TABLE
(
  ID INT Identity(1,1) Primary Key,
  profile_id INT,
  FullName VarChar(255),
  GroupID Int,
  Phone1 VarChar(255),
  Phone2 VarChar(255),
  Phone3 VarChar(255),
  Phone4 VarChar(255),
  HasPhones INT
)

В нее помещаются записи (информация о гостях). Возможно есть дубликаты, т.е. записи,
с совпадающими FullName и одним из телефонов Phone1..Phone4.
profile_id - уникальное поле для каждой записи.
Мне нужно, чтобы GroupID хранило некоторый уникальный идентификатор группы дубликатов.
Т.е. чтобы все дубликаты имели одинаковый GroupID.
Можно взять MIN(profile_id) конечно. Но я хочу чтобы GroupID был как-бы "пронумерован" по порядку.



совпадать может любой из телефонов?
Если да то как нумеровать записи при пересечении групп по разным телефонам?


insert @Duplicates(FullName, Phone1, Phone2)
SELECT 'Name1', '01', '03' Union All
SELECT 'Name1', '02', '03' Union All
SELECT 'Name1', '02', '04'
12 янв 10, 15:14    [8171741]     Ответить | Цитировать Сообщить модератору
 Re: Будет ли действовать такая конструкция в SQL2005, SQL2008?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31217
Филипп Вульфович
Мне нужно, чтобы GroupID хранило некоторый уникальный идентификатор группы дубликатов.
Т.е. чтобы все дубликаты имели одинаковый GroupID.
Можно взять MIN(profile_id) конечно. Но я хочу чтобы GroupID был как-бы "пронумерован" по порядку.
Для 2005-го и выше для нумерации можно использовать оконные функции

Если универсально, то просто подзапрос с подсчётом количества.
12 янв 10, 15:18    [8171774]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить