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

Откуда:
Сообщений: 49
Здравствуйте.
Есть таблица, с первичным ключом (на одном столбце), который генерится не средствами SQL Server, а в хранимой процедуре.
стоит задача вставлять в эту таблицу запись, идентичную уже существующей, отличающуюся одним полем (не считая ключа).
проблема в том как лучше это делать.
1.
insert into table1 
select * from table1 where table1id='id_value'

не работает потому что надо генерить ключ.
2.
EXEC getid @ID=@newID OUTPUT
insert into table1 
select @newid, field1, field2,...,fieldN from table1 where table1id='id_value' 
будет работать, но если в таблицу table1 добавить поле - придется менять код.
3.
EXEC getid @ID=@newID OUTPUT
insert into table1 (table1id,field1, field2,...,fieldN)
values (@newid, @field1, @field2,...,@fieldN )
, будет работать, если записать в @field соответствующие значения. Но если в table1 добавить поле, то оно не будет копироваться.
Есть ли способ так вставлять в таблицу, чтобы добавление полей не влекло за собой изменение кода?
29 сен 09, 11:20    [7718816]     Ответить | Цитировать Сообщить модератору
 Re: insert в таблицу записи идентичной уже существующей там  [new]
ShiZo
Member

Откуда:
Сообщений: 49
версия MS SQL Server 9.0.4035
29 сен 09, 11:22    [7718836]     Ответить | Цитировать Сообщить модератору
 Re: insert в таблицу записи идентичной уже существующей там  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
Читаем внимательно
29 сен 09, 11:23    [7718843]     Ответить | Цитировать Сообщить модератору
 Re: insert в таблицу записи идентичной уже существующей там  [new]
ShiZo
Member

Откуда:
Сообщений: 49
Ken@t
да, я читал про Primary key.
но все равно не могу понять Вашу мысль
29 сен 09, 11:34    [7718953]     Ответить | Цитировать Сообщить модератору
 Re: insert в таблицу записи идентичной уже существующей там  [new]
Jaffar
Member

Откуда:
Сообщений: 633
выход есть всегда:
1. соберите динамический запрос.
возьмите данные из sys.columns - по этой таблице и все.
29 сен 09, 11:40    [7719015]     Ответить | Цитировать Сообщить модератору
 Re: insert в таблицу записи идентичной уже существующей там  [new]
Jaffar
Member

Откуда:
Сообщений: 633
вот специально для вас.
пользуйтесь.
declare @TableName varchar(255), -- имя таблицы
		@ID varchar(255), -- имя поля, значение которого генериться с помощью процедуры
		@IDVal numeric(16) -- значение для условия по которому выбираются строки для копирования
select  @TableName = 'tla_Account',
		@ID = 'ID',
		@IDVal = 12456845

declare @Q varchar(max) set @Q = ''
select top (1000) @Q = @Q + ltrim(rtrim(c.name))+','
from sys.objects o with(nolock)
left join sys.columns c with(nolock) on c.object_id = o.object_id and c.name != @ID
where
		o.name = @TableName
order by c.name asc

select @Q = '
declare @new_ID numeric(16)
exec gen_ID @new_ID output

insert '+@TableName+'('+@ID+','+ substring(@Q, 1, DATALENGTH(@Q)-1)+') '+char(13)+char(10)+
'select @new_ID,' + substring(@Q, 1, DATALENGTH(@Q)-1)+' '+char(13)+char(10)+
'from '+@TableName+' with(nolock)
where
		ID = '+cast(@IDVal as varchar(32))
exec(@Q)
29 сен 09, 12:05    [7719227]     Ответить | Цитировать Сообщить модератору
 Re: insert в таблицу записи идентичной уже существующей там  [new]
ветерочек
Member

Откуда: СПБ
Сообщений: 153
использовать * обычно не рекомендуют , если очень хочется
то что нить такое

SELECT * INTO #table1 FROM table1 where table1id='id_value' 
EXEC getid @ID=@newID OUTPUT
UPDATE #table1
SET table1id=@newid

insert into table1 
select * from #table1
29 сен 09, 12:27    [7719391]     Ответить | Цитировать Сообщить модератору
 Re: insert в таблицу записи идентичной уже существующей там  [new]
ShiZo
Member

Откуда:
Сообщений: 49
Jaffar
вот специально для вас.
пользуйтесь.

спасибо большое. вроде работает :)
29 сен 09, 12:44    [7719559]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить