我通过搜索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
我只是想...我是否有可能插入一条带有SOME Random UniqueColID值的新记录,但所有其他列都插入了值“o”或“u”或“一些随机文本”然后我在UniqueColID之外的所有UniqueColID列中插入此新记录?这样我就会有一个新的UniqueColID,其余的列具有相同的值。
KCD我已经尝试了两个代码块而没有工作.. :(
我个人不知道SELECT @NewUniqueColID ....甚至是如何工作的,因为表中没有名为@NewUniqueColID
的值的列答案 0 :(得分:4)
但是看起来很可怕,我建议使用指定完整列列表的查询。但是您不需要自己输入所有字段:使用SQL Server Management Studio,右键单击对象资源管理器中的表,然后选择菜单项“脚本表为| INSERT到|新查询窗口”。
这会给你这样的东西:
INSERT INTO [dbo].[TableOfficerLogs]
([UniqueColID]
,[OtherField1]
,[OtherField2] -- etc.
,[OtherFieldN]
VALUES
(<UniqueColID, int,>
,<OtherField1, nvarchar(200),>
,<OtherField2, nvarchar(200),> --etc.
,<OtherFieldN, nvarchar(200),>)
不要让这吓到你 - 你仍然不会手动输入所有的值。现在单独离开该窗口一秒钟,然后返回到对象资源管理器。使用同一个表上的上下文菜单,获取另一个脚本:“脚本表为| SELECT To |新查询窗口”。这将是一个完全标准的选择列表,列出您的所有字段。复制整个查询并将其粘贴到第一个查询窗口中的VALUES子句上。
这将为您提供一个完整的INSERT ... SELECT查询,其中列出了所有字段。现在,只需根据需要替换SELECT部分中的UniqueColID。
此外,如果您事先知道新的UniqueColID值,请在FROM子句中加入它们(表示为表值参数,如果您在sproc中执行所有这些操作):您将最终得到尽可能多的重复项,每个都有你指定的ID。
<强>更新强>
两个“脚本表作为”操作将为您提供的内容是这样的,列出了所有字段:
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个表中的每个表重复此过程。
答案 1 :(得分: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