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 值的列
无论看起来多么可怕,我都建议使用指定完整列列表的查询。但是您不需要自己输入所有字段:使用 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 个表中的每一个重复此过程。