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

Откуда:
Сообщений: 356
Здравствуйте
Ситуация:
есть две таблицы T1 и T2

полностью одинаковые, за исключением одной строчки - в T1 отличается от T2
вот нужно одной командой перенести эту строчку из T2 в T1, они джойнятся между собой по vcode
2 июл 14, 10:15    [16247175]     Ответить | Цитировать Сообщить модератору
 Re: Проапдейтить всю строку  [new]
_human
Member

Откуда:
Сообщений: 560
R-Magistr,

insert into T1(vcode)

select vcode
from T2
EXCEPT
select vcode
from T1 
2 июл 14, 10:21    [16247221]     Ответить | Цитировать Сообщить модератору
 Re: Проапдейтить всю строку  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
update x set
  x.Строка = y.Строка
from T1 x
 inner join T2 y on x.vcode =y.vcode
2 июл 14, 10:21    [16247225]     Ответить | Цитировать Сообщить модератору
 Re: Проапдейтить всю строку  [new]
Maxx
Member [скрыт]

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

если перенести ето довать - ваше решение скорее всего более правильное
2 июл 14, 10:22    [16247233]     Ответить | Цитировать Сообщить модератору
 Re: Проапдейтить всю строку  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
_human
R-Magistr,

insert into T1(vcode)

select vcode
from T2
EXCEPT
select vcode
from T1 


в таблицах оооооооооооооооооооооооооооооооооооооочень много столбиков, перечислять их в ручную оооооооооооооооочень долго, можно как-нить так эх и та строчка вместо этой ))))) Пожалуйста
2 июл 14, 10:27    [16247284]     Ответить | Цитировать Сообщить модератору
 Re: Проапдейтить всю строку  [new]
_human
Member

Откуда:
Сообщений: 560
Maxx
update x set
  x.Строка = y.Строка
from T1 x
 right join T2 y on x.vcode =y.vcode
where T2.vcode is null

это уже ТС-у нужно определится что он хочет.
2 июл 14, 10:29    [16247295]     Ответить | Цитировать Сообщить модератору
 Re: Проапдейтить всю строку  [new]
Glory
Member

Откуда:
Сообщений: 104760
R-Magistr
перечислять их в ручную оооооооооооооооочень долго,

Можно просто не лениться и потрудить руки.
Можно попросить студия сгенернировать шаблон команды update
Можно сформировать запрос динамически из систменого представления со списком полей
2 июл 14, 10:30    [16247310]     Ответить | Цитировать Сообщить модератору
 Re: Проапдейтить всю строку  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
Maxx
_human,

если перенести ето довать - ваше решение скорее всего более правильное


может я неправильно выразился, но перенести, скопировать, в общем сделать идентичными, а там уж как технология позволит, но что бы были две одинаковые строчки в двух разных таблицах
2 июл 14, 10:30    [16247311]     Ответить | Цитировать Сообщить модератору
 Re: Проапдейтить всю строку  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
R-Magistr, Напишите скрипт на автоматическую генерацию апдейта по схеме, чего сложного то. А потом останется только выполнить.
2 июл 14, 10:30    [16247315]     Ответить | Цитировать Сообщить модератору
 Re: Проапдейтить всю строку  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
Minamoto
R-Magistr, Напишите скрипт на автоматическую генерацию апдейта по схеме, чего сложного то. А потом останется только выполнить.


что это такое?
2 июл 14, 10:35    [16247363]     Ответить | Цитировать Сообщить модератору
 Re: Проапдейтить всю строку  [new]
Glory
Member

Откуда:
Сообщений: 104760
R-Magistr
что это такое?

Скрипт - это написанный руками программный код
2 июл 14, 10:37    [16247382]     Ответить | Цитировать Сообщить модератору
 Re: Проапдейтить всю строку  [new]
_human
Member

Откуда:
Сообщений: 560
R-Magistr,
Glory
Можно сформировать запрос динамически из систменого представления со списком полей

рекомендую опробовать.
2 июл 14, 10:38    [16247386]     Ответить | Цитировать Сообщить модератору
 Re: Проапдейтить всю строку  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
_human
R-Magistr,
Glory
Можно сформировать запрос динамически из систменого представления со списком полей

рекомендую опробовать.


Можно пример? пожалуйста, не соображу как это...
2 июл 14, 10:40    [16247409]     Ответить | Цитировать Сообщить модератору
 Re: Проапдейтить всю строку  [new]
_human
Member

Откуда:
Сообщений: 560
R-Magistr,

use tempdb

create table #T (ababagalamaga int)

declare @col_str varchar;
set @col_str =  (select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS)
print @col_str

думаю идея понятна.
поищите на форуме, не раз обсуждалось скорее всего.
2 июл 14, 10:48    [16247486]     Ответить | Цитировать Сообщить модератору
 Re: Проапдейтить всю строку  [new]
_human
Member

Откуда:
Сообщений: 560
для наглядности

use tempdb

create table #T (ababagalamaga int, test2 bit)
create table #T2 (alMurrey char)

declare @col_str varchar(100);

set @col_str = '';
select @col_str = @col_str + ',' + COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS
where INFORMATION_SCHEMA.COLUMNS.TABLE_NAME = OBJECT_NAME( object_id('#T', 'U'))
print @col_str

drop table #T;
drop table #T2;
2 июл 14, 11:02    [16247565]     Ответить | Цитировать Сообщить модератору
 Re: Проапдейтить всю строку  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
R-Magistr
_human
R-Magistr,
пропущено...

рекомендую опробовать.


Можно пример? пожалуйста, не соображу как это...


Как то так:

select '(' + stuff((
				SELECT ', [' + col.NAME + ']'
				FROM sys.columns col
				INNER JOIN sys.objects obj
					ON col.object_id = obj.object_id
				WHERE obj.NAME LIKE 'mytable'
					AND col.NAME NOT LIKE 'SysRowTimestamp'
				FOR XML path('')
				), 1, 2, '') + ')'


На update, думаю, без проблем переделаете.
2 июл 14, 11:04    [16247576]     Ответить | Цитировать Сообщить модератору
 Re: Проапдейтить всю строку  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Glory
R-Magistr
перечислять их в ручную оооооооооооооооочень долго,

Можно просто не лениться и потрудить руки.
Можно попросить студия сгенернировать шаблон команды update
Можно сформировать запрос динамически из систменого представления со списком полей
А можно кликнуть на узел Columns нужной таблицы и "перетащить" в окно с запросом. По-моему это намного проще
2 июл 14, 22:43    [16252141]     Ответить | Цитировать Сообщить модератору
 Re: Проапдейтить всю строку  [new]
o-o
Guest
Mind,

прикольно. а мне даже никогда в голову не приходило всю папочку в окно перетянуть.
СПСБ!
2 июл 14, 23:52    [16252296]     Ответить | Цитировать Сообщить модератору
 Re: Проапдейтить всю строку  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Mind, круто, не знал о таком :)
Но для апдейта не подходит, там же надо написать Field = t1.Field, это все же лучше динамикой делать, КМК.
3 июл 14, 10:27    [16253190]     Ответить | Цитировать Сообщить модератору
 Re: Проапдейтить всю строку  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
На SQL PASS кто-то показал этот трюк. Причем больше половины аудитории признались, что не знали про это.
3 июл 14, 11:10    [16253535]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить