2012-03-20 31 views
-1

我有一張有很多列的表格。例如我有一個表,這些列:複製有特殊條件的行

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 

錯誤:

消息2714,級別16,狀態6,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'表中,只能在列 使用列且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; 

,但我有這個錯誤還:

消息545,級別16,狀態1,11號線 顯式值必須爲標識列指定在表'CmDet2'中,當IDENTITY_INSERT設置爲ON或複製用戶插入NOT FOR REPLICATION標識列時。

+0

您是從一張表複製到同一個表中?那麼,您將不得不使用INSERT INTO dbo.CmDet(company,col1,col2,....,colN)SELECT 12,col1,col2,...,colN FROM dbo。CmDet WHERE Company = 11'來實現這一目標。另外:你需要確保**避免**指定'ID'(身份)列 - 因爲你不能將值插入到該列中 - SQL Server負責這個..... – 2012-03-20 11:23:45

+0

你可以很容易地創建一個列表你可以使用[米奇小麥這個方便的提示](http://mitch-wheat.blogspot.com/2011/04/ssms-table-column-list-tip.html) - 然後只刪除那些你不需要的列('ID') – 2012-03-20 11:30:17

+0

是的,我想複製到同一個表中。但我不想寫列名,因爲我有很多列的列很多。我想寫一個查詢,並更改表名和exec。 – 2012-03-20 11:30:17

回答

0

您正試圖插入已存在的表中。我建議,要麼刪除CmDet表,然後重新運行第一個查詢(如果表的目的是存儲臨時數據)。或者,你可以使用:

SET IDENTITY_INSERT CmDet ON;

,這將允許你插入顯式值插入表的標識列。

+0

是的 - 但然後他會開始複製**重複值**到他的'ID'列!不是一個好主意...... – 2012-03-20 11:24:19

+1

我同意,但直到我們知道'CmDet'純粹是一個'temp'表格,我只是發現了一些選項。 – 2012-03-20 11:26:07

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