gpt4 book ai didi

sql-server - 复制记录的 TSQL 存储过程(有一个转折!)

转载 作者:行者123 更新时间:2023-12-04 06:40:31 27 4
gpt4 key购买 nike

我正在尝试在 SQL Server (2005) 中编写一个存储过程来做一些听起来很简单但实际上比我想象的要困难的事情。

我有一个包含 30 列和 50,000 行的表。

记录数是固定的,但用户可以编辑现有记录的字段。

为了让他们不必重新键入重复数据,我想让他们能够选择一条记录,并指定一系列 ID 以将这些详细信息复制到其中。

我正在尝试编写的 SP 将采用 3 个参数:源记录主键,以及数据将复制到的记录范围的上下主键。

显然,目标记录的 PK 保持不变。

所以我认为 SP 需要做一个 SELECT - 获取要复制的所有数据,以及一个 UPDATE - 将数据写入指定的目标记录。

我只是不知道如何存储 SELECT 的结果以将它们插入到 UPDATE 中。
临时表无济于事 - 从中​​进行选择与从表中进行选择相同!

我需要的是一个实际上是单个记录的变量,所以我可以这样做:

@tempRECORD = SELECT * FROM SOURCETABLE WHERE ID = @sourcePK

UPDATE SOURCETABLE
SET FIELD1 = @tempRECORD.FIELD1,
FIELD2 = @tempRECORD.FIELD2,
...
FIELD30 = @tempRECORD.FIELD30
WHERE ID >= @LOWER_id AND ID <= @UPPER_id

但我不知道怎么做,或者你是否可以。
我也对任何其他我从未想过的聪明方式持开放态度!

谢谢你们!

最佳答案

So I figured the SP needs to do a SELECT - to get all the data to be copied, and an UPDATE - to write the data into the specified destination records.



您需要的是 UPDATE 的 T-SQL 特定扩展, UPDATE ... FROM :
UPDATE T
SET
Field1 = source.Field1
, Field2 = source.Field2
, Field3 = source.Field3
FROM
(SELECT * FROM T AS source_T WHERE source_T.ID = @sourcePK) as source
WHERE
T.ID BETWEEN @LOWER_Id AND @UPPER_Id

注意这个能力放一个 FROM UPDATE 中的条款语句不是标准的 ANSI SQL,所以我不知道在其他 RDBMS 中如何做到这一点。

关于sql-server - 复制记录的 TSQL 存储过程(有一个转折!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4301607/

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