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

Откуда:
Сообщений: 27
Есть таблица READERS с несколькими столбцами. В нее нужно добавить новый столбец с данными из другой таблицы TAB2 (столбец pass).
Запрос
INSERT READERS (pass) SELECT pass FROM TAB2

выдает ошибку

Cannot insert the value NULL into column 'RDR_ID', table 'Каталог.dbo.READERS'; column does not allow nulls. INSERT fails.

В READERS столбец 'RDR_ID' NULL запрещено.

Как надо правильно переносить данные в столбец pass?
14 апр 15, 13:54    [17512801]     Ответить | Цитировать Сообщить модератору
 Re: Копирование данных в таблицу (пмомогите чайнику)  [new]
Glory
Member

Откуда:
Сообщений: 104751
anlip
Как надо правильно переносить данные в столбец pass?

Не добавлять NULL-ы в поле 'RDR_ID
14 апр 15, 13:57    [17512816]     Ответить | Цитировать Сообщить модератору
 Re: Копирование данных в таблицу (пмомогите чайнику)  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Приведите схему обеих таблиц.
14 апр 15, 14:03    [17512853]     Ответить | Цитировать Сообщить модератору
 Re: Копирование данных в таблицу (пмомогите чайнику)  [new]
anlip
Member

Откуда:
Сообщений: 27
READERS (RDR_ID,CODE, NAME,EMAIL,SEX,...,PASS)

TAB2 (PASS)
14 апр 15, 14:08    [17512889]     Ответить | Цитировать Сообщить модератору
 Re: Копирование данных в таблицу (пмомогите чайнику)  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21243
anlip
Есть таблица READERS с несколькими столбцами. В нее нужно добавить новый столбец с данными из другой таблицы TAB2 (столбец pass).

Сначала надо создать это новое поле в таблице READERS (ALTER TABLE READERS ADD COLUMN ...).
Затем выполнить обновление (UPDATE) его значения данными из другой таблицы, установив соответствия записей в табkицах (т.е. связав их).
14 апр 15, 14:10    [17512914]     Ответить | Цитировать Сообщить модератору
 Re: Копирование данных в таблицу (пмомогите чайнику)  [new]
Glory
Member

Откуда:
Сообщений: 104751
anlip
TAB2 (PASS)

И что должно добавиться в остальные поля READERS ?
14 апр 15, 14:11    [17512918]     Ответить | Цитировать Сообщить модератору
 Re: Копирование данных в таблицу (пмомогите чайнику)  [new]
xenix
Guest
Тут или INSERT со значениями по умолчанию, или UPDATE
14 апр 15, 14:11    [17512919]     Ответить | Цитировать Сообщить модератору
 Re: Копирование данных в таблицу (пмомогите чайнику)  [new]
anlip
Member

Откуда:
Сообщений: 27
xenix
Тут или INSERT со значениями по умолчанию, или UPDATE


Так?
UPDATE READERS SET pass = (SELECT pass FROM TAB2)
14 апр 15, 14:41    [17513105]     Ответить | Цитировать Сообщить модератору
 Re: Копирование данных в таблицу (пмомогите чайнику)  [new]
Glory
Member

Откуда:
Сообщений: 104751
anlip
xenix
Тут или INSERT со значениями по умолчанию, или UPDATE


Так?
UPDATE READERS SET pass = (SELECT pass FROM TAB2)

Это вы хотите обновить READERS в произвольном порядке ?
14 апр 15, 14:46    [17513144]     Ответить | Цитировать Сообщить модератору
 Re: Копирование данных в таблицу (пмомогите чайнику)  [new]
anlip
Member

Откуда:
Сообщений: 27
Akina
установив соответствия записей в табkицах (т.е. связав их).

А как их связать? :-)
14 апр 15, 14:47    [17513148]     Ответить | Цитировать Сообщить модератору
 Re: Копирование данных в таблицу (пмомогите чайнику)  [new]
xenix
Guest
автор
А как их связать?

обычно вяжут по ключу. Вы бы лучше привели пример данных и желаемый результат
14 апр 15, 14:49    [17513160]     Ответить | Цитировать Сообщить модератору
 Re: Копирование данных в таблицу (пмомогите чайнику)  [new]
anlip
Member

Откуда:
Сообщений: 27
Можно и в произвольном, т.к. в TAB2 сгенерированные пароли
14 апр 15, 15:01    [17513238]     Ответить | Цитировать Сообщить модератору
 Re: Копирование данных в таблицу (пмомогите чайнику)  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
UPDATE r
SET pass = t.pass
FROM READERS r
CROSS APPLY (
	SELECT TOP(1) pass
	FROM TAB2
	ORDER BY NEWID()
) t
14 апр 15, 15:03    [17513251]     Ответить | Цитировать Сообщить модератору
 Re: Копирование данных в таблицу (пмомогите чайнику)  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Возможно, я понял Вашу задачу. Задать случайный пароль для каждого читателя? Если да, то запрос выше - рецепт счастья.
14 апр 15, 15:05    [17513259]     Ответить | Цитировать Сообщить модератору
 Re: Копирование данных в таблицу (пмомогите чайнику)  [new]
Glory
Member

Откуда:
Сообщений: 104751
anlip
Можно и в произвольном, т.к. в TAB2 сгенерированные пароли

Вот теперь берете и ручками для каждой записи переносите сгененрированный пароль в нужную вам запись таблицы READERS
14 апр 15, 15:07    [17513269]     Ответить | Цитировать Сообщить модератору
 Re: Копирование данных в таблицу (пмомогите чайнику)  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
AlanDenton
Задать случайный пароль для каждого читателя?
Чтобы ни один читатель прочитать не смог!
14 апр 15, 15:08    [17513277]     Ответить | Цитировать Сообщить модератору
 Re: Копирование данных в таблицу (пмомогите чайнику)  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
iap,

Какая формулировка задачи - такой и напрашивается и решение :)
14 апр 15, 15:10    [17513291]     Ответить | Цитировать Сообщить модератору
 Re: Копирование данных в таблицу (пмомогите чайнику)  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21243
По-моему, ТС ещё пока наивно полагает, что данные в его таблицах расположены в некоем порядке...
14 апр 15, 15:10    [17513295]     Ответить | Цитировать Сообщить модератору
 Re: Копирование данных в таблицу (пмомогите чайнику)  [new]
anlip
Member

Откуда:
Сообщений: 27
AlanDenton
Возможно, я понял Вашу задачу. Задать случайный пароль для каждого читателя? Если да, то запрос выше - рецепт счастья.

Да, именно такая задача.

По Вашему запросу
Server: Msg 170, Level 15, State 1, Line 4
Line 4: Incorrect syntax near 'APPLY'.
Server: Msg 170, Level 15, State 1, Line 5
Line 5: Incorrect syntax near '('.
14 апр 15, 15:13    [17513323]     Ответить | Цитировать Сообщить модератору
 Re: Копирование данных в таблицу (пмомогите чайнику)  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
anlip,

У Вас SQL Server 2000? Раз ругается на APPLY. У меня парсинг этого запроса прошел без ошибок.
14 апр 15, 15:15    [17513339]     Ответить | Цитировать Сообщить модератору
 Re: Копирование данных в таблицу (пмомогите чайнику)  [new]
anlip
Member

Откуда:
Сообщений: 27
AlanDenton, на 2000 не работает, на 2008 запрос отработался, но в каждую строку вставилось одно и тоже значение
14 апр 15, 15:29    [17513435]     Ответить | Цитировать Сообщить модератору
 Re: Копирование данных в таблицу (пмомогите чайнику)  [new]
Glory
Member

Откуда:
Сообщений: 104751
anlip
но в каждую строку вставилось одно и тоже значение

Это и есть произвольная, на выбор сервера, запись.
Просто он все время выбирал одну и туже запись, что не противоречит вашему заданию
14 апр 15, 15:30    [17513447]     Ответить | Цитировать Сообщить модератору
 Re: Копирование данных в таблицу (пмомогите чайнику)  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
UPDATE r
SET pass = t.pass
FROM dbo.READERS r
CROSS APPLY (
	SELECT TOP(1) pass
	FROM dbo.PASS p
	ORDER BY NEWID(), r.id ------ <<<<
) t
14 апр 15, 15:34    [17513486]     Ответить | Цитировать Сообщить модератору
 Re: Копирование данных в таблицу (пмомогите чайнику)  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
anlip
AlanDenton, на 2000 не работает, на 2008 запрос отработался, но в каждую строку вставилось одно и тоже значение


На 2000 сиквеле нет конструкции CROSS/OUTER APPLY. Она появилась начиная с 2005 версии. Почему и спросил.

Далее, чтобы не вставлялось одно и тоже значение - в сортировке задайте столбец из таблицы, которую Вы хотите обновить. Это заставит оптимизатор запроса для каждой записи из READERS вернуть свой случайный пароль.
14 апр 15, 15:37    [17513506]     Ответить | Цитировать Сообщить модератору
 Re: Копирование данных в таблицу (пмомогите чайнику)  [new]
Glory
Member

Откуда:
Сообщений: 104751
AlanDenton
Далее, чтобы не вставлялось одно и тоже значение - в сортировке задайте столбец из таблицы, которую Вы хотите обновить.

И как это гарантирует, что из PASS не будет одна и таже запись выбрана повторно ?
14 апр 15, 15:42    [17513552]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить