![]() |
![]() |
![]() |
|
Замена строки в таблице MSSQL на ссылки из другой таблицы | ☑ | ||
---|---|---|---|---|
0
Midaw
07.09.10
✎
13:10
|
Есть спецы по скулю? можете накидать процедурку.
есть таблица1 (регистр) со значением1 (строка) и значением2 (ссылка). есть таблица2 (справочник) со значением3 (ссылка) и значением4 (строка). нужно используя значение1 найти в таблице2 соответствия значению4 и вместо значение2 (таблица1) подставить значение3 (таблицы2). не могу даже представить как такое реализовать. явно должны быть циклы... самое главное таблица не должна целиком загружаться в память (таблица1 > 40гб). |
|||
1
ДенисЧ
07.09.10
✎
13:14
|
update table1
from table2 set field2 = table2.field3 where table1.field1 = table.field4 что-то вроде такого |
|||
2
Midaw
07.09.10
✎
13:16
|
(1) а разве 1с-ка рисует схему отношений в mssql? чтоб использовать ".".
|
|||
3
ДенисЧ
07.09.10
✎
13:16
|
(2) а причём тут схема отношений? Вообще, что это такое? :-)
|
|||
4
Midaw
07.09.10
✎
13:19
|
(3) всё, сообразил
|
|||
5
Midaw
07.09.10
✎
13:21
|
"set" это установка конкретного поля в "update" таблице?
|
|||
6
Midaw
07.09.10
✎
13:23
|
интересно испытаю сегодня завтра...
тут ещё загвоздка. написал программку для заполнения справочника найденными строками из регистра. что то повисло. надо переписывать... |
|||
7
ДенисЧ
07.09.10
✎
13:24
|
(5) ага. Прочитай firststeps.ru - там учебничек по скулю есть...
|
|||
8
dk
07.09.10
✎
13:25
|
и эта, может рано пока в скуль с прямой записью лезть с такими знаниями
|
|||
9
Midaw
07.09.10
✎
13:27
|
(7) да купил я уже две книжки...
(8) знания вполне достаточные в понятиях sql. ну да tsql ещё поизучать надо... |
|||
10
Midaw
07.09.10
✎
13:30
|
тут ещё синтаксис 1с убивает. раньше на access'e писал запросы (много) и нормально. а теперь к "выбрать" в 1с-ке привык и порой долго думаю над каким нибудь "union"... )))
|
|||
11
Just4Fun
07.09.10
✎
13:34
|
я так делал
update _Reference23 set _Fld9593RRef = (select _IDRReF from _Enum379 where _EnumOrder = '0') Установил значение реквизита по умолчанию (значение перечисления) sql-запросом выполнилось за 1-2 секунды. средствами 1с наверное и ночи не хватило бы. справочник большой |
|||
12
Just4Fun
07.09.10
✎
13:39
|
у тебя наверное еще добавить условие на значения полей
|
|||
13
Midaw
07.09.10
✎
13:52
|
(12) условие в подзапросе я так понимаю не будет видеть значения из основного запроса.
|
|||
14
CoolCat
07.09.10
✎
13:57
|
(13)
update table1 set f2 = (select f3 from table2 where f4 = 'строка со значением 1') |
|||
15
CoolCat
07.09.10
✎
13:58
|
(13) условие в подзапросе влияет только на подзапрос
|
|||
16
Midaw
07.09.10
✎
14:04
|
(15) ну короче не подходит. у меня строк со значением1 много...
первый вариант запустил и оно задумалось. |
|||
17
Midaw
07.09.10
✎
14:07
|
тут вот что ещё интересно, как оно проиграет пустые ссылки...
|
|||
18
Just4Fun
07.09.10
✎
14:12
|
(13) в подзапросе выбирается значение (у меня значение перечисления), которое устанавливается
|
|||
19
Midaw
07.09.10
✎
14:14
|
(18) в твоем случае все прекрасно и красиво. в моем случае значения "строка со значением 1" в количестве 40 Гбайт... )))
|
|||
20
Midaw
07.09.10
✎
14:15
|
по какому принципу sql работает с таблицами. допустим запустил я обработку таблицы update и тут же запускаю второй запрос выборки 100 строк из той же таблицы. вот второй запрос виснет, как и возможно первый. так вот нельзя ли приоритет выставить второго запроса... и как вообще такие запросы от 1с-ки дружат?!
|
|||
21
Just4Fun
07.09.10
✎
14:17
|
(20) хороший вопрос :) нужно где то почитать, как работают блокировки
|
|||
22
Midaw
07.09.10
✎
14:18
|
(20)+ монитор активности показал что второй запрос стоит в ожидании из-за блокировки. как я понимаю всей таблицы... однако!
|
|||
23
Just4Fun
07.09.10
✎
14:19
|
(19) 40 гигов размер базы или именно таблицы?
|
|||
24
Midaw
07.09.10
✎
14:20
|
(23) размер таблицы
|
|||
25
Just4Fun
07.09.10
✎
14:22
|
Скопируй эти две таблицы в отдельную БД и потренируйся на них.
кстати, такой вопрос, как регистр обрабатывать хочешь? у регистра ведь еще могут быть и вспомиогательные таблицы |
|||
26
Midaw
07.09.10
✎
14:23
|
(25) индексы и итоги переформировать проблемы нет. ещё видел таблицу регистрация изменений, но я так понимаю она мне не интересна и наверняка пустая )
|
|||
27
Midaw
07.09.10
✎
14:24
|
копировать таблицу нафиг не надо, база пробная.
|
|||
28
Midaw
07.09.10
✎
16:08
|
меньше 2 часов. запрос выполнился... и самое интересное, время выполнение радует )))
|
|||
29
CoolCat
07.09.10
✎
16:43
|
(0) UPDATE Table1
SET поле2 = (SELECT поле3 FROM Table2 WHERE поле4 = Table1.поле1) если во второй таблице не будет найдено значение - он в значение2 пиханет НУЛЛ |
|||
30
Midaw
07.09.10
✎
16:50
|
(29) попробуем и этот вариант. в книгах чёт подобное видел. посмотрим что будет быстрее )
|
|||
31
Midaw
07.09.10
✎
18:00
|
(29) запрос отработал за 35 минут. быстрее в 3-4 раза. но есть и косяк. заполнились значения NULL, вместо не заполненных никак в первом варианте запроса.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |