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

Откуда: россия
Сообщений: 8
уже как неделю ищу решение проблемы.вроде бы не сложно,но ничего не получается.
есть 2 таблицы.
village и village1, На скриншоте это видно.
Нужно из таблицы village ,данные столбца municipal_id, проапдейтить в столбец municipal_id таблицы village1
а именно проапдейтить так что бы village_name был равен municipal_id.
спасибо

К сообщению приложен файл. Размер - 137Kb
22 апр 15, 17:18    [17550156]     Ответить | Цитировать Сообщить модератору
 Re: проабдейтить стоблбец одной таблицы в другую  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
андрей1990,

эта фраза
автор
а именно проапдейтить так что бы village_name был равен municipal_id

ввела меня в абсолютный ступор:)
Вы чего хотите то, можете итоговый вариант обновленных данных указать?
22 апр 15, 17:26    [17550204]     Ответить | Цитировать Сообщить модератору
 Re: проабдейтить стоблбец одной таблицы в другую  [new]
Glory
Member

Откуда:
Сообщений: 104751
https://msdn.microsoft.com/ru-ru/library/ms177523.aspx
22 апр 15, 17:32    [17550245]     Ответить | Цитировать Сообщить модератору
 Re: проабдейтить стоблбец одной таблицы в другую  [new]
андрей1990
Member

Откуда: россия
Сообщений: 8
WarAnt,

окей)


в общем в village1 должно получиться так

village_name | municipal_id
Абинск | 1
Анапа | 2
Воскресенский| 2
Красный | 2
Сукко | 2
Апшеронск | 3
Кабардинка | 3
Куринское | 3
Нефтегорск | 3


(т.е. municipal_id должен соответствовать village_name). Можно было бы просто скопировать колонку Municipal_id из village в village2, но я привел скриншот ниже,почему это невозможно.така как данные village1 начиная где-то с 65 строки имена в village_name начинают разниться.

К сообщению приложен файл. Размер - 136Kb
23 апр 15, 10:46    [17552749]     Ответить | Цитировать Сообщить модератору
 Re: проабдейтить стоблбец одной таблицы в другую  [new]
Glory
Member

Откуда:
Сообщений: 104751
андрей1990
в общем в village1 должно получиться так

Ну вот и начните с написания select-а, который именно так и выберет данные
23 апр 15, 10:53    [17552776]     Ответить | Цитировать Сообщить модератору
 Re: проабдейтить стоблбец одной таблицы в другую  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
андрей1990,

а Вас не смущает, что пара village_id - village_name в разных таблицах не совпадают?
Я таки не понимаю при чем тут municipal_id, если речь идет про village_name то логичней было бы сравнивать и выправлять пару village_id - village_name.
23 апр 15, 11:01    [17552819]     Ответить | Цитировать Сообщить модератору
 Re: проабдейтить стоблбец одной таблицы в другую  [new]
андрей1990
Member

Откуда: россия
Сообщений: 8
Glory,

в том та и дело,что уже пытался,но что-то никак не получается.
23 апр 15, 11:08    [17552854]     Ответить | Цитировать Сообщить модератору
 Re: проабдейтить стоблбец одной таблицы в другую  [new]
Glory
Member

Откуда:
Сообщений: 104751
андрей1990
в том та и дело,что уже пытался,но что-то никак не получается.

Да неужели. И как пытались ?
23 апр 15, 11:10    [17552865]     Ответить | Цитировать Сообщить модератору
 Re: проабдейтить стоблбец одной таблицы в другую  [new]
андрей1990
Member

Откуда: россия
Сообщений: 8
WarAnt,

если сказать на прямую как нужно,необходимо. обновить данные колонки municipal_id из таблицы village в village1 до 65 строки.
23 апр 15, 11:10    [17552868]     Ответить | Цитировать Сообщить модератору
 Re: проабдейтить стоблбец одной таблицы в другую  [new]
o-o
Guest
похоже, village_id там никакое не id, а какой-нибудь номер строки загружаемого Экселя,
т.е. они наверняка неуникальные.
во второй таблице какие-то данные "неполные", он их хочет дополнить этими municipal_id из первой,
но связь у него по названию,
т.е.
автор
а именно проапдейтить так что бы village_name был равен municipal_id

переводится "update village1 set municipal_id ... где village, village1 связать по village_name"
23 апр 15, 11:14    [17552885]     Ответить | Цитировать Сообщить модератору
 Re: проабдейтить стоблбец одной таблицы в другую  [new]
андрей1990
Member

Откуда: россия
Сообщений: 8
o-o,

да ,именно так.вот сделал,но не работает,выводит ошибку

UPDATE village1
SET municipal_id=(select municipal_id from village)
where village.village_name=village1.village_name
23 апр 15, 11:18    [17552907]     Ответить | Цитировать Сообщить модератору
 Re: проабдейтить стоблбец одной таблицы в другую  [new]
Glory
Member

Откуда:
Сообщений: 104751
андрей1990
да ,именно так.вот сделал,но не работает,выводит ошибку

Потому что надо начинать с написания select-а
23 апр 15, 11:19    [17552912]     Ответить | Цитировать Сообщить модератору
 Re: проабдейтить стоблбец одной таблицы в другую  [new]
iap
Member

Откуда: Москва
Сообщений: 47110
андрей1990
o-o,

да ,именно так.вот сделал,но не работает,выводит ошибку

UPDATE village1
SET municipal_id=(select municipal_id from village)
where village.village_name=village1.village_name
Подзапрос (select municipal_id from village) должен давать одно скалярное значение, а у Вас?
К тому же непонятно, где связь таблицы в подзапросе с изменяемой внешней таблицей?
Плюс к этому - как можно обращаться к внутренней таблице подзапроса снаружи?
Разве village объявлялась во FROMе UPDATEа? Нет!
И последнее. Надо проапдейтить все без исключения записи village1 или, всё-таки, какие-то определённые?
В подавляющем большинстве случаев WHERE должно ограничивать количество изменяющихся записей.
23 апр 15, 11:27    [17552972]     Ответить | Цитировать Сообщить модератору
 Re: проабдейтить стоблбец одной таблицы в другую  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
андрей1990
o-o,

да ,именно так.вот сделал,но не работает,выводит ошибку

UPDATE village1
SET municipal_id=(select municipal_id from village)
where village.village_name=village1.village_name


Глори вам правильно говорит, начните с написание просто селекта по этим двум таблицам со связью name=name, за одним увидите чего собираетесь во-что проабгредить.
23 апр 15, 11:45    [17553116]     Ответить | Цитировать Сообщить модератору
 Re: проабдейтить стоблбец одной таблицы в другую  [new]
iap
Member

Откуда: Москва
Сообщений: 47110
WarAnt
андрей1990
o-o,

да ,именно так.вот сделал,но не работает,выводит ошибку

UPDATE village1
SET municipal_id=(select municipal_id from village)
where village.village_name=village1.village_name


Глори вам правильно говорит, начните с написание просто селекта по этим двум таблицам со связью name=name, за одним увидите чего собираетесь во-что проабгредить.
Вы же видите - клиент плавает и не понимает что ему тут говорят.
Как он сможет сделать из этого SELECT - уму непостижимо.
Я бы ему посоветовал разобраться с UPDATE ... SET ... FROM ... JOIN ... WHERE
https://msdn.microsoft.com/ru-ru/library/ms177523(v=sql.120).aspx
23 апр 15, 12:02    [17553232]     Ответить | Цитировать Сообщить модератору
 Re: проабдейтить стоблбец одной таблицы в другую  [new]
SSV-Rif
Guest
наверное нужен запрос UPDATE с FROM и с JOIN... если есть поля, по которым можно однозначно связать две таблицы...
23 апр 15, 12:04    [17553244]     Ответить | Цитировать Сообщить модератору
 Re: проабдейтить стоблбец одной таблицы в другую  [new]
андрей1990
Member

Откуда: россия
Сообщений: 8
SSV-Rif,

мне тоже говорили что с inner join сделать можно
23 апр 15, 12:56    [17553605]     Ответить | Цитировать Сообщить модератору
 Re: проабдейтить стоблбец одной таблицы в другую  [new]
андрей1990
Member

Откуда: россия
Сообщений: 8
не простой вы путь предлагаете.
решил идти по обходному пути через дебри.

создал в village1 одну колонку с именем test.
написал скрипт,который бы записывал municipal_id из village в таблицу village1 в столбец test
вот сам скрипт

CREATE TABLE #village8211
(
[qw] [varchar](65) NULL,
)

INSERT INTO #village8211
SELECT municipal_id
FROM village
select * from #village8211

INSERT INTO village1 (test) select
* from #village8211


но выдает ошибку с таким текстом:

(165 row(s) affected)

(165 row(s) affected)
Msg 515, Level 16, State 2, Line 11
Cannot insert the value NULL into column 'village_name', table 'ABINSK.dbo.village1'; column does not allow nulls. INSERT fails.
The statement has been terminated.
23 апр 15, 15:15    [17554580]     Ответить | Цитировать Сообщить модератору
 Re: проабдейтить стоблбец одной таблицы в другую  [new]
Glory
Member

Откуда:
Сообщений: 104751
андрей1990
но выдает ошибку с таким текстом:

И вы этот текст прочитали ?
23 апр 15, 15:21    [17554614]     Ответить | Цитировать Сообщить модератору
 Re: проабдейтить стоблбец одной таблицы в другую  [new]
wegt
Member

Откуда:
Сообщений: 25
Здесь нужен простейший update.

Но, внезапно:

андрей1990

(165 row(s) affected)




Автор просто открой на редактирование табличку в SQL Server Managment Studio - т.е. правым кликом на табличке village1 и выбери Edit Top 200 Rows.

Далее ручками все поправь как тебе надо, ибо дольше объяснять тебе про запрос :(
23 апр 15, 18:20    [17555552]     Ответить | Цитировать Сообщить модератору
 Re: проабдейтить стоблбец одной таблицы в другую  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4852
андрей1990,

Чего-то вы всё кругами ходите. Вам надо написать UPDATE с JOIN

-- UPDATE statement with CTE references that are incorrectly matched.
USE tempdb;
GO
DECLARE @x TABLE (ID int, Value int);
DECLARE @y TABLE (ID int, Value int);
INSERT @x VALUES (1, 10), (2, 20);
INSERT @y VALUES (1, 100),(2, 200);

WITH cte AS (SELECT * FROM @x)
UPDATE cte   -- cte is not referenced by the alias.
SET Value = y.Value
FROM cte AS x  -- cte is assigned an alias.
INNER JOIN @y AS y ON y.ID = x.ID; 
SELECT * FROM @x; 
GO
23 апр 15, 18:33    [17555607]     Ответить | Цитировать Сообщить модератору
 Re: проабдейтить стоблбец одной таблицы в другую  [new]
iap
Member

Откуда: Москва
Сообщений: 47110
a_voronin
андрей1990,

Чего-то вы всё кругами ходите. Вам надо написать UPDATE с JOIN

-- UPDATE statement with CTE references that are incorrectly matched.
USE tempdb;
GO
DECLARE @x TABLE (ID int, Value int);
DECLARE @y TABLE (ID int, Value int);
INSERT @x VALUES (1, 10), (2, 20);
INSERT @y VALUES (1, 100),(2, 200);

WITH cte AS (SELECT * FROM @x)
UPDATE cte   -- cte is not referenced by the alias.
SET Value = y.Value
FROM cte AS x  -- cte is assigned an alias.
INNER JOIN @y AS y ON y.ID = x.ID; 
SELECT * FROM @x; 
GO
Для ясности UPDATE x писать намного лучше. ИМХО
23 апр 15, 20:00    [17555859]     Ответить | Цитировать Сообщить модератору
 Re: проабдейтить стоблбец одной таблицы в другую  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31912
iap
Для ясности UPDATE x писать намного лучше. ИМХО
Для ясности нужно всегда начинать с написания SELECT, как уже сказали несколько раз.
iap
Вы же видите - клиент плавает и не понимает что ему тут говорят.
Как он сможет сделать из этого SELECT - уму непостижимо.
Ну, не понимает, чтож, нужно учиться.

Написать запрос на русском языке.

Потом перевести его на язык T-SQL, отладить, получить правильные данные.

Потом открыть справку по UPDATE, заменить в SELECT-е 2 слова и получить нужный UPDATE
23 апр 15, 20:13    [17555912]     Ответить | Цитировать Сообщить модератору
 Re: проабдейтить стоблбец одной таблицы в другую  [new]
iap
Member

Откуда: Москва
Сообщений: 47110
alexeyvg
Для ясности нужно всегда начинать с написания SELECT, как уже сказали несколько раз.
Не надо быть таким категоричным
24 апр 15, 09:44    [17557310]     Ответить | Цитировать Сообщить модератору
 Re: проабдейтить стоблбец одной таблицы в другую  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
Зачем в примере цте???
24 апр 15, 09:48    [17557336]     Ответить | Цитировать Сообщить модератору
 Re: проабдейтить стоблбец одной таблицы в другую  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31912
iap
alexeyvg
Для ясности нужно всегда начинать с написания SELECT, как уже сказали несколько раз.
Не надо быть таким категоричным
Почему нет? Если ясности нет, если непонятно, что как обновлять и что с чем связывать - SELECT даст это понимание. Так что "всегда" - это тут не художественное преувеличени, а просто хорошая практика экономии времени и защиты от багов...
24 апр 15, 10:27    [17557553]     Ответить | Цитировать Сообщить модератору
 Re: проабдейтить стоблбец одной таблицы в другую  [new]
андрей1990
Member

Откуда: россия
Сообщений: 8
alexeyvg,

попробовал так

update village1
set municipal_id = '1000'
where village_id = '1'

но опять же,выдает ошибку

Msg 207, Level 16, State 1, Procedure village_iu, Line 0
Invalid column name 'ver_date'.
Msg 207, Level 16, State 1, Procedure village_iu, Line 0
Invalid column name 'ver_u_id'.


хотя я указываю в каком столбце нужно поменять значение
27 апр 15, 09:28    [17567475]     Ответить | Цитировать Сообщить модератору
 Re: проабдейтить стоблбец одной таблицы в другую  [new]
Glory
Member

Откуда:
Сообщений: 104751
андрей1990
Procedure village_iu

Откуда вдруг процедура ?
27 апр 15, 09:31    [17567488]     Ответить | Цитировать Сообщить модератору
 Re: проабдейтить стоблбец одной таблицы в другую  [new]
iap
Member

Откуда: Москва
Сообщений: 47110
Glory
андрей1990
Procedure village_iu

Откуда вдруг процедура ?
По названию предположу, что это триггер AFTER INSERT, UPDATE
27 апр 15, 09:44    [17567540]     Ответить | Цитировать Сообщить модератору
 Re: проабдейтить стоблбец одной таблицы в другую  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31912
андрей1990
попробовал так

update village1
set municipal_id = '1000'
where village_id = '1'

но опять же,выдает ошибку

Msg 207, Level 16, State 1, Procedure village_iu, Line 0
Invalid column name 'ver_date'.
Msg 207, Level 16, State 1, Procedure village_iu, Line 0
Invalid column name 'ver_u_id'.


хотя я указываю в каком столбце нужно поменять значение
Очевидно, где то дальше в процедуре (триггере) village_iu есть обращение к полям ver_date и ver_u_id

И процедура не может просто скомпилиться, судя по тому, что "Line 0", т.е. она падает, не начав выполняться.
27 апр 15, 10:49    [17567989]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Microsoft SQL Server Ответить