使用 SQL 插入重复记录

Bul*_*vak 2 sql sql-server stored-procedures

我正在通过搜索 UniqueColID 并将结果插入回表中来复制记录....这样做我有一个重复的条目,这是我想要的,除了我希望一列不重复并且该列是 UniqueColID ..

下面是我的代码:

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
Run Code Online (Sandbox Code Playgroud)

每个表都有 NUMEROUS 列,但它们都共享 UniqueColID。

当我插入副本时,我希望所有详细信息都是重复的,但我想插入一个新的 UniqueColID ..我该怎么做?

新的 UniqueColID 是由 ASP.NET 代码中的特殊方法生成的。我想要 2 或 3 或 4 个不同的 UniqueColID,其余的列是重复的。

我尝试了您所说的第二个代码块,但出现错误:

"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
Run Code Online (Sandbox Code Playgroud)

我只是在想....我是否可以插入一个带有一些随机 UniqueColID 值的新记录,但所有其他列都插入了值“o”或“u”或“一些随机文本”然后我插入到这个新记录除了 UniqueColID 之外的所有 UniqueColID 列?这样我就会有一个新的 UniqueColID,其余的列都具有相同的值。

KCD 我已经尝试了你的代码块,但都没有工作.. :(

我个人不明白 SELECT @NewUniqueColID .... 甚至是如何工作的,因为表中没有名为 @NewUniqueColID 值的列

Dom*_*c P 6

无论看起来多么可怕,我都建议使用指定完整列列表的查询。但是您不需要自己输入所有字段:使用 SQL Server Management Studio,右键单击对象资源管理器中的表,然后选择菜单项“脚本表为|插入到|新建查询窗口”。

这会给你这样的东西:

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

不要让这吓到您——您仍然不会手动输入所有 VALUES。现在离开该窗口一秒钟,然后返回对象资源管理器。使用同一个表上的上下文菜单,获取另​​一个脚本:“脚本表为 | SELECT To | 新查询窗口”。这将是一个完全标准的选择列表,其中列出了您的所有字段。复制整个查询并将其粘贴到第一个查询窗口中的 VALUES 子句上。

这将为您提供一个完整的 INSERT ... SELECT 查询,其中列出了所有字段。现在,只需根据需要替换 SELECT 部分中的 UniqueColID。

此外,如果您事先知道新的 UniqueColID 值,请在 FROM 子句中加入它们(表示为表值参数,也许,如果您在 sproc 中执行所有这些操作):您最终会得到尽可能多的重复项根据您的喜好,每个都有您指定的 ID。

更新:

两个“Script Table as”操作将为您提供如下内容,并列出所有字段:

INSERT INTO [dbo].[TableOfficerLogs]
               ([UniqueColID]
               ,[OtherField1]
               ,[OtherField2] -- etc.
               ,[OtherFieldN]
SELECT [UniqueColID]
      ,[OtherField1]
      ,[OtherField2] -- etc.
      ,[OtherFieldN]
Run Code Online (Sandbox Code Playgroud)

现在,要实际复制,您需要修改它。您的代码最终可能如下所示:

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
Run Code Online (Sandbox Code Playgroud)

这将复制指定的行并用新 ID 替换旧 ID。当然,您会为 8 个表中的每一个重复此过程。