Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
 Аватар для Zwelenewskiy
129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651

Вставка в таблицу

26.11.2019, 21:40. Показов 648. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно из одной таблицы вставить значения в другую. В процедуру передаются массивы в виде xml:
Кликните здесь для просмотра всего текста
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
create procedure UpdateEmail
    @ID int,
    @from int,
    @date datetime,
    @content nvarchar(300),
    @name nvarchar(20),
    @new_to xml,
    @new_copy xml,
    @new_hidden_copy xml,
    @new_email_tag xml
AS
begin
    UPDATE email 
    SET
        [from] = @from,
        [date] = @date,
        [content] = @content,
        [name] = @name
    WHERE email.ID = @ID
 
    DELETE FROM [to] 
    WHERE [to].email_id = @ID
 
    DELETE FROM [copy] 
    WHERE [copy].email_id = @ID
 
    DELETE FROM [hidden_copy]
    WHERE [hidden_copy].email_id = @ID
 
    DELETE FROM [email_tag] 
    WHERE [email_tag].email_id = @ID
 
    INSERT INTO [to]([email_id], [user_id])
        SELECT 
            @ID as email_id, tmp.n.value('int[1]', 'int') as [user_id]
        FROM 
            @new_to.nodes('/ArrayOfInt') tmp(n)
 
    INSERT INTO [copy]([email_id], [user_id])
        SELECT 
            @ID as email_id, tmp.n.value('int[1]', 'int') as [user_id]
        FROM 
            @new_copy.nodes('/ArrayOfInt') tmp(n)
 
    INSERT INTO [hidden_copy]([email_id], [user_id])
        SELECT 
            @ID as email_id, tmp.n.value('int[1]', 'int') as [user_id]
        FROM 
            @new_hidden_copy.nodes('/ArrayOfInt') tmp(n)
 
    INSERT INTO [email_tag]([email_id], [tag_id])
        SELECT 
            @ID as [email_id], tmp.n.value('int[1]', 'int') as [tag_id]
        FROM 
            @new_email_tag.nodes('/ArrayOfInt') tmp(n)
end;


new_to, new_copy, new_hidden_copy и new_email_tag - те самые массивы. Проблема в том, что в таблицы сохраняются только первые значения. В процедуру передаются все значения - проверено точно
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.11.2019, 21:40
Ответы с готовыми решениями:

Вставка в таблицу
Всем привет. Очень нужна помощь, разъясните, пожалуйста, в чём может быть проблема. Имеется 4 таблицы. table1, столбец Column1 ...

Вставка в таблицу
Привет всем. Подскажите пожалуйста выполняю вставку в таблицу вот таки запросом: "INSERT INTO users...

Вставка в таблицу
Программно создаю таблицу(В БД нет ни одной таблицы) private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { ...

7
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
26.11.2019, 21:49
Цитата Сообщение от Zwelenewskiy Посмотреть сообщение
T-SQL
1
2
3
4
SELECT 
            @ID as email_id, tmp.n.value('int[1]', 'int') as [user_id]
        FROM 
            @new_to.nodes('/ArrayOfInt') tmp(n)
Такой запрос вернет одну строку
Надо так
T-SQL
1
2
3
4
SELECT 
            @ID as email_id, tmp.n.value('text()[1]', 'int') as [user_id]
        FROM 
            @new_to.nodes('/ArrayOfInt/int') tmp(n)
0
 Аватар для Zwelenewskiy
129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651
26.11.2019, 22:35  [ТС]
invm, что, собственно, делает text()?
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
27.11.2019, 09:30
Zwelenewskiy, извлекает текстовое содержимое элемента.

Для понимания:
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
declare @x xml = '
<ArrayOfInt>
 <int>
  1
 </int>
 <int>
  2
  <x>
   some text
  </x>
 </int>
</ArrayOfInt>';
 
select
 t.n.value('text()[1]', 'varchar(100)'),
 t.n.value('string(.)', 'varchar(100)'),
 t.n.value('.', 'varchar(100)')
from
 @x.nodes('/ArrayOfInt/int') t(n);
0
 Аватар для Zwelenewskiy
129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651
27.11.2019, 13:18  [ТС]
Цитата Сообщение от invm Посмотреть сообщение
Надо так
При таком варианте в данном случае user_id становится null. Хм...

Добавлено через 27 секунд
Т.е. получается, что интовое значение приводится к text
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
27.11.2019, 13:26
Цитата Сообщение от Zwelenewskiy Посмотреть сообщение
При таком варианте в данном случае user_id становится null. Хм...
user_id - это значение элемента <int>. Соответственно стать null'ом он может, когда <int> пустой.
Цитата Сообщение от Zwelenewskiy Посмотреть сообщение
Т.е. получается, что интовое значение приводится к text
Откуда такие выводы?
0
 Аватар для Zwelenewskiy
129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651
27.11.2019, 13:32  [ТС]
invm, для структуры
XML
1
2
3
4
<ArrayOfInt>
<int>1</int>
<int>2</int>
</ArrayOfInt>
Цитата Сообщение от invm Посмотреть сообщение
t.n.value('text()[1]', 'int'),
выдавало ошибку о null-значении => все же, нал. По факту) Да, Вы, вероятно, показали это для работы с текстом. Но в моем случае только инты)

Работает такой вариант, при доступе непосредственно к int-разделу:
T-SQL
1
2
3
4
SELECT 
            @ID as email_id, tmp.n.value('.', 'int') as [user_id]
        FROM 
            @new_to.nodes('/ArrayOfInt/int') tmp(n)
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
27.11.2019, 13:44
Zwelenewskiy, в xml только текст, к int вы приводите сами в функции value.
В вашем случае, . и text()[1] дадут одинаковый результат.
T-SQL
1
2
3
4
5
6
7
8
9
10
declare @x xml = '<ArrayOfInt>
 <int>1</int>
 <int>2</int>
</ArrayOfInt>';
 
select
 t.n.value('text()[1]', 'int'),
 t.n.value('.', 'int')
from
 @x.nodes('/ArrayOfInt/int') t(n);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.11.2019, 13:44
Помогаю со студенческими работами здесь

Вставка формы в таблицу (IE)
Возникла необходимость вставить форму в таблицу. Так вот, в Опере все выглядит замечательно, а в IE после формы добавляется пустая строка....

Вставка в новую таблицу
Доброго времени суток. Есть вот такой код: Use SalesAnalyst INSERT INTO .dbo.MyOFF ( Contractor, OUTNUM, ORDNUM,

вставка в таблицу DataSet
помогите пожалуйста, при подключении DataSet к базе данных и перетягивании его на форму, автоматически генерируется следующий код: ...

Вставка строк в таблицу БД
Доброго времени суток! Отображаю данные, хранящиеся в таблице БД, через DBGridEh (Рисунок ниже). Пытаюсь перенести выбранные в этом...

Вставка изображения в таблицу БД
Всем доброго времени суток! Пытаюсь реализовать вставку изображений в таблицу БД. Для чего в таблице создаю поле (текстового типа),...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru