2012-06-06 173 views
2

我通過搜索UniqueColID並將結果插回到表中來複制記錄....這樣做我有一個重複的條目,這是我想要的除了我想要一列不重複和該列UniqueColID ..用SQL插入重複記錄

下面是我的代碼:

CREATE PROCEDURE [dbo].[InsertDuplicateFields] 
    (@UniqueColID varchar(50), @IndividualID varchar(50) = null) 
AS 
Begin   
    INSERT INTO TableCollisionBegin 
     SELECT * FROM TableCollisionBegin 
     WHERE [UniqueColID] = @UniqueColID; 

    INSERT INTO TableCollisionDetails 
     SELECT * FROM TableCollisionDetails 
     WHERE [UniqueColID] = @UniqueColID; 

    INSERT INTO TableCollisionLocation 
     SELECT * FROM TableCollisionLocation 
     WHERE [UniqueColID] = @UniqueColID; 

    INSERT INTO TableDriver 
     SELECT * FROM TableDriver 
     WHERE [UniqueColID] = @UniqueColID; 

    INSERT INTO TableFollowUp 
     SELECT * FROM TableFollowUp 
     WHERE [UniqueColID] = @UniqueColID; 

    INSERT INTO TableOfficerLogs 
     SELECT * FROM TableOfficerLogs 
     WHERE [UniqueColID] = @UniqueColID; 

    INSERT INTO TablePolice 
     SELECT * FROM TablePolice 
     WHERE [UniqueColID] = @UniqueColID; 

    INSERT INTO TableRecVerified 
     SELECT * FROM TableRecVerified 
     WHERE [UniqueColID] = @UniqueColID; 

    INSERT INTO TableSignature 
     SELECT * FROM TableSignature 
     WHERE [IndividualID] = @IndividualID; 

    INSERT INTO TableTrailer 
     SELECT * FROM TableTrailer 
     WHERE [UniqueColID] = @UniqueColID; 

    INSERT INTO TableValidateLog 
     SELECT * FROM TableValidateLog 
     WHERE [UniqueColID] = @UniqueColID; 

    INSERT INTO TableVehicle 
     SELECT * FROM TableVehicle 
     WHERE [UniqueColID] = @UniqueColID; 

    INSERT INTO TableWitness 
     SELECT * FROM TableWitness 
     WHERE [UniqueColID] = @UniqueColID; 


End 

每個表有許多列,但他們都有UniqueColID。

當我插入重複我想所有的細節重複,但我想插入一個新的UniqueColID ..我可以做到這一點?

新的UniqueColID由ASP.NET代碼中的特殊方法生成。我想有2或3或4不同的UniqueColID與其餘的列是重複的。

我想你說的代碼2號地塊,但得到的錯誤:

"Unknown object type 'TEMPORARY' used in a CREATE, DROP, or ALTER statement." 





CREATE PROCEDURE [dbo].[AmendInsertDuplicateFields] (@UniqueColID varchar(50), @NewUniqueColID varchar(50)) 

AS 
Begin CREATE TEMPORARY TABLE Temp AS SELECT * FROM [MVCNew].[dbo].[CollisionBegin] WHERE [UniqueColID] = @UniqueColID; 

UPDATE Temp SET UniqueColID = @NewUniqueColID; 
INSERT INTO [MVCNew].[dbo].[CollisionBegin] SELECT * FROM Temp; 
DROP TEMPORARY TABLE IF EXISTS Temp; 
End 

我只是在想....是否有可能對我來說,插入一些隨機UniqueColID值的新紀錄但所有其他列都插入值爲「o」或「u」或「一些隨機文本」,然後我插入到此新記錄的所有UniqueColID列除了UniqueColID?這樣我會有一個新的UniqueColID與其餘的列具有相同的值。

KCD我曾經嘗試都你的代碼,並沒有工作塊.. :(

我個人沒有看到如何選擇@NewUniqueColID ....甚至工作,因爲在命名的值的表沒有列@NewUniqueColID

回答

4

然而可怕的,似乎,我會建議使用指定整列清單查詢。但是你不要不需要輸入一個請自行填寫這些字段:使用SQL Server Management Studio,右鍵單擊對象資源管理器中的表格,然後選擇菜單項「Script Table as |」 INSERT到| 。新的查詢窗口」

這會給你這樣的事情:

INSERT INTO [dbo].[TableOfficerLogs] 
      ([UniqueColID] 
      ,[OtherField1] 
      ,[OtherField2] -- etc. 
      ,[OtherFieldN] 
    VALUES 
      (<UniqueColID, int,> 
      ,<OtherField1, nvarchar(200),> 
      ,<OtherField2, nvarchar(200),> --etc. 
      ,<OtherFieldN, nvarchar(200),>) 

不要讓這種嚇唬你 - 你還是不會手動輸入所有的值現在爲單獨離開該窗口。秒,然後返回到對象資源管理器,使用同一張表的上下文菜單獲取另一個腳本:「腳本表爲|選擇至|新查詢窗口「這將是一個完全標準的選擇列表,其中列出所有的字段複製整個查詢並將其粘貼到第一個查詢窗口中的VALUES子句上

這會給你一個完整的INSERT ... SELECT查詢列出了所有的字段現在,只需在SELECT部分​​中替換UniqueColID(0127)如果你在FROM子句中做了所有這些,你可能會得到儘可能多的重複項,每個重複項都有你指定的ID。

UPDATE:

兩個「腳本表的」操作會得到你是這樣的,所有的領域列出什麼:

INSERT INTO [dbo].[TableOfficerLogs] 
       ([UniqueColID] 
       ,[OtherField1] 
       ,[OtherField2] -- etc. 
       ,[OtherFieldN] 
SELECT [UniqueColID] 
     ,[OtherField1] 
     ,[OtherField2] -- etc. 
     ,[OtherFieldN] 

現在,真正做拷貝,你修補它。您的代碼可能最終看起來像這樣:

CREATE PROCEDURE [dbo].[InsertDuplicateFields]   
    (@UniqueColID varchar(50), @NewUniqueColID varchar(50))   
AS  

INSERT INTO [dbo].[TableOfficerLogs] 
       ([UniqueColID] 
       ,[OtherField1] 
       ,[OtherField2] -- etc. 
       ,[OtherFieldN] 
SELECT @NewUniqueColID 
     ,[OtherField1] 
     ,[OtherField2] -- etc. 
     ,[OtherFieldN] 
WHERE UniqueColID = @UniqueColID 

這將複製指定行,並代之以新的ID爲舊的。當然,你會爲你的8個表中的每一個重複這個過程。

1

當你的應用程序生成的原始UniqueColID我會建議它通過新的ID了。

CREATE PROCEDURE [dbo].[InsertDuplicateFields] 
    (@UniqueColID varchar(50), @NewUniqueColID varchar(50), @IndividualID varchar(50) = null) 
AS 
Begin   
    SELECT * 
    INTO TempTable 
    FROM TableCollisionBegin 
    WHERE [UniqueColID] = @UniqueColID 

    UPDATE TempTable SET [UniqueColID] = @NewUniqueColID 

    INSERT INTO TableCollisionBegin 
     SELECT * 
     FROM TempTable 

    DROP TABLE TempTable 

    ... 
End 
+0

你是說我手動輸入列名,例如ColB,ColC,ColD?在這些表格中有200個ish列我會堅持試圖做到這一點... – Bulvak

+0

是的,想你可以這麼說!希望第二個建議有幫助... – KCD

+0

我試過你提到的第二個塊,我得到:在CREATE,DROP或ALTER語句中使用的未知對象類型'TEMPORARY'。 – Bulvak