我有一张包含很多列的表格。例如,我有一个包含这些列的表:
ID,Fname,Lname,Tel,Mob,Email,Job,Code,Company,......
ID
列是自动编号列。我想将此表中的所有行复制到此表,并在此复制的行中将company
列值更改为12。我不想写所有列的名称,因为我有很多列有很多列。
我试过这段代码,但是我遇到了这个错误:
declare @c int;
declare @i int;
select * into CmDet from CmDet;
select @C= count(id) from CmDet;
while @i < @C
begin
UPDATE CmDet
SET company =12
WHERE company=11
set @i += 1
end
错误:
Msg 2714,Level 16,State 6,Line 3
数据库中已经有一个名为“CmDet”的对象。
我将代码更改为此
declare @c int
declare @i int
insert into CmDet select * from CmDet;
select @C= count(id) from CmDet;
while @i < @C
begin
UPDATE CmDet
SET company =12
WHERE company=11
set @i += 1
end
我有这个错误:
消息8101,级别16,状态1,行3显式的值 表'CmDet'中的标识列只能在列中指定 使用list并且IDENTITY_INSERT为ON。
我该怎么办?
我写这段代码:
drop table temp2;
declare @c bigint ;
select @C= count(id) from CmDet2;
SELECT *
INTO temp2
FROM CmDet2;
ALTER TABLE temp2
drop column ID;
update temp2 set company='12';
SET IDENTITY_INSERT dbo.CmDet2 ON
insert into CmDet2 select * from temp2;
SET IDENTITY_INSERT dbo.CmDet2 OFF;
但我还有这个错误:
Msg 545,Level 16,State 1,Line 11 当IDENTITY_INSERT设置为ON或复制用户插入NOT FOR REPLICATION标识列时,必须为表'CmDet2'中的标识列指定显式值。
答案 0 :(得分:0)
您正在尝试插入已存在的表中。我建议,删除CmDet
表,然后重新运行第一个查询(如果表的目的是存储临时数据)。或者,您可以使用:
SET IDENTITY_INSERT CmDet ON;
这将允许您将显式值插入表的标识列。
答案 1 :(得分:0)
以下是插入“复制”行并将公司值替换为12的代码。不要在列表中包含ID列,而是用适当的列名替换a,b,c,d,e。在SELECT
声明中使用相同的列表, 除了公司! 。
INSERT INTO TBL
( a,
b,
c,
d,
e,
company
)
SELECT
a,
b,
c,
d,
e,
12 AS company
FROM
TBL
WHERE
1=1
-- Include the following line if you only want specific rows (company 11)
AND company = 11