2

我通过搜索 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

每个表都有 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

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

KCD 我已经尝试了你的代码块并且没有工作.. :(

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

4

2 回答 2

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),>)

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

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

此外,如果您提前知道新的 UniqueColID 值,请在 FROM 子句中加入它们(表示为表值参数,如果您在存储过程中执行所有这些操作):您最终会得到尽可能多的重复项随你喜欢,每个都有你指定的 ID。

更新:

这两个“Script Table as”操作将为您提供如下所示的内容,其中列出了所有字段:

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 替换旧 ID。当然,您可以对 8 个表中的每一个重复此过程。

于 2012-06-07T15:01:55.747 回答
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
于 2012-06-06T23:44:51.480 回答