Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Gennadiy83 Member Откуда: Сообщений: 560 |
Всем, здравствуйте! Устраняя проблемы предыдущего программиста, пришлось добавить поле ID в таблицу, в которой 270500 записей. Заполняю поле в цикле значениями 1, 2, 3 и т.д., но процесс затянулся на многие часы. Подскажите как это поле можно заполнить быстрее, может есть встроенные инструменты. |
23 дек 10, 08:44 [9985625] Ответить | Цитировать Сообщить модератору |
Верблюд Member Откуда: Яженичеловек!!! Сообщений: 65007 |
Указать его как identity. |
||
23 дек 10, 08:46 [9985634] Ответить | Цитировать Сообщить модератору |
Gennadiy83 Member Откуда: Сообщений: 560 |
Огромное спасибо |
||||
23 дек 10, 10:17 [9986141] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31813 |
И тогда кто-то другой будет "Устранять проблемы предыдущего программиста" :-) |
||||
23 дек 10, 15:37 [9988910] Ответить | Цитировать Сообщить модератору |
qwasdcvbtfhryj
Guest |
Можно попробоватьupdate t set id=tt.id from YOUR_TABLE t join ( select row_number() over(partition by FIELD1 order by FIELD2) id, FIELD1, FIELD from YOUR_TABLE ) tt on t.FIELD1=tt.FIELD1 and t.FIELD2=tt.FIELD2Конечно, если есть уникальное поле FIELD2. |
23 дек 10, 16:03 [9989118] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47061 |
WITH CTE(id,n) AS (SELECT id,ROW_NUMBER()OVER(ORDER BY(SELECT 0))) UPDATE CTE SET id=n;Ибо порядок нумерации нам неведом... |
||
23 дек 10, 16:08 [9989164] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47061 |
WITH CTE(id,n) AS (SELECT id,ROW_NUMBER()OVER(ORDER BY(SELECT 0))FROM [Таблица]) UPDATE CTE SET id=n; |
||
23 дек 10, 16:09 [9989175] Ответить | Цитировать Сообщить модератору |
qwasdcvbtfhryj
Guest |
iap, А что, манипуляции с объектом CTE(id,n) скажутся на [Таблица]? |
23 дек 10, 16:12 [9989203] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47061 |
![]() Вообще-то, CTE - это не объект в традиционном понимании. Скорее, похоже на виртуальное представление. |
||
23 дек 10, 16:22 [9989297] Ответить | Цитировать Сообщить модератору |
pasha701 Member Откуда: Дніпропетровськ Сообщений: 231 |
DECLARE @id int SET @id = 0 Update YOUR_TABLE Set ID_FIELD=@id, @id=@id+1 |
23 дек 10, 17:11 [9989660] Ответить | Цитировать Сообщить модератору |
-=FlinT=- Member Откуда: Сообщений: 91 |
Когда-то меня на этом форуме больно отпинали ногами за подобный подход. В общем, юзать такой UPDATE не рекомендуется :) |
||
23 дек 10, 17:15 [9989685] Ответить | Цитировать Сообщить модератору |
Xordal Member Откуда: Таганрог Сообщений: 536 |
ALTER TABLE <table name> ALTER COLUMN <column name> int identity (1,1) NOT NULLа
реально какое-то стремное решение ![]() |
||
23 дек 10, 17:40 [9989883] Ответить | Цитировать Сообщить модератору |
qwasdcvbtfhryj
Guest |
Xordal, Ну, добавите вы новую колонку в таблицу. А данные где взять? |
23 дек 10, 17:47 [9989941] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47061 |
и тем более менять их впоследствии |
||
23 дек 10, 17:48 [9989944] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47061 |
|
||
23 дек 10, 17:48 [9989953] Ответить | Цитировать Сообщить модератору |
Xordal Member Откуда: Таганрог Сообщений: 536 |
Что мешает потом поменять тип на int, религия? Человеку надо заполнить максимально быстро колонку уникальными значениями. ALTER TABLE <table name> ALTER COLUMN <column name> int identity (1,1) NOT NULL GO ALTER TABLE <table name> ALTER COLUMN <column name> int NOT NULL GOлибо если колонка еще не создана: ALTER TABLE <table name> ADD ID int identity (1,1) NOT NULL GO ALTER TABLE <table name> ALTER COLUMN ID int NOT NULL GO |
||||
23 дек 10, 18:04 [9990072] Ответить | Цитировать Сообщить модератору |
pasha701 Member Откуда: Дніпропетровськ Сообщений: 231 |
|
||
23 дек 10, 18:13 [9990145] Ответить | Цитировать Сообщить модератору |
iljy Member Откуда: Сообщений: 8711 |
use tempdb if object_ID('#ttt','U') is not null drop table #ttt go create table #ttt(id int identity, val int) alter table #ttt alter column id int not null select name, is_identity from sys.columns where object_id = OBJECT_ID('#ttt','U') drop table #tttРезультат name is_identityА так alter table #ttt alter column id int identity not nullвообще ошибку получите
Нельзя поменять у поля свойство identity. Можно только его удалить и создать новое. |
||||
23 дек 10, 18:25 [9990223] Ответить | Цитировать Сообщить модератору |
iljy Member Откуда: Сообщений: 8711 |
pasha701, тогда уж проще так DECLARE @id int SET @id = 0 Update YOUR_TABLE Set @id = ID_FIELD=@id+1Но это все возможно только если не важен порядок. |
23 дек 10, 18:28 [9990236] Ответить | Цитировать Сообщить модератору |
qwasdcvbtfhryj
Guest |
Но можно в SSMS удалить свойство identity у поля. |
23 дек 10, 18:36 [9990290] Ответить | Цитировать Сообщить модератору |
iljy Member Откуда: Сообщений: 8711 |
Ага, а слабо жамкнуть на кнопочку "Создать сценарий изменения" и посмотреть, что же там происходит на самом деле? |
||
23 дек 10, 18:39 [9990310] Ответить | Цитировать Сообщить модератору |
qwasdcvbtfhryj
Guest |
Очевидно, елается через временные таблицы. Зато самому не надо заморачиваться, все сделает SSMS. |
23 дек 10, 18:41 [9990325] Ответить | Цитировать Сообщить модератору |
iljy Member Откуда: Сообщений: 8711 |
![]() |
||
23 дек 10, 18:43 [9990334] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
создате себе таблицу счетчик,для каждой сущности и узаете пока не надоест .... моя непонимать .... |
23 дек 10, 18:43 [9990336] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
ваще править талицы через гуй - ето крута :) Ето верних пилотаж..ровно как и соберать селекты контрукторами |
||||
23 дек 10, 18:44 [9990343] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |