gpt4 book ai didi

sql - 在 SQL 中克隆行的最快方法

转载 作者:行者123 更新时间:2023-12-03 02:36:53 25 4
gpt4 key购买 nike

我想克隆具有单个主键 (PrimKey) 的多个表的行。在 SQL Server 2005 中克隆行的最快方法是什么?

这是一个例子

克隆 PrimKey1 以获取 PrimKey2。所以我尝试以下操作:

INSERT INTO PrimKeys 
SELECT 'PrimKey2' AS PrimKey,*
FROM PrimKeys
WHERE PrimKey='PrimKey1'

但是,这里的问题当然是,PrimKey 列在内部 SELECT 语句中重复出现。还有其他类似上面简单的方法吗?

<小时/>

谢谢大家的回复。我继续编写了一个在我的应用程序中处理该问题的函数。我不使用存储过程或临时表,因此我无法使用你们中的一些人发布的一些有效答案。

最佳答案

您可以运行类似于下面的存储过程的操作,以避免键入所有列名称。下面的示例假定为 int,但您可以将键类型替换为任何数据类型。

create procedure [CloneRow]
@tableName varchar(max),
@keyName varchar(max),
@oldKeyId int,
@newTableId int output
as
declare @sqlCommand nvarchar(max),
@columnList varchar(max);

select @columnList = coalesce(@columnList + ',','') + sys.columns.name
from sys.columns
where object_name(sys.columns.object_id) = @tableName
and sys.columns.name not in ( @keyName )
and is_computed = 0;

set @sqlCommand = 'insert into ' + @tableName + ' ( ' + @columnList + ') (' +
'select ' + @columnList + ' from ' + @tableName + ' where ' + @keyName + ' = @oldKeyId )'
exec sp_executesql @sqlCommand, N'@oldKeyId int', @oldKeyId = @oldKeyId
select @newTableId = @@identity -- note scope_identity() won't work here!
GO

你可以这样调用它:

declare @newOrderId int
exec [CloneRow] 'orderTable', 'orderId', 625911, @newOrderId output

关于sql - 在 SQL 中克隆行的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1479976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com