吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 419|回复: 3
收起左侧

[求助] 请教一个sqlserver 数据库 update/替换的问题

[复制链接]
ywj_1211 发表于 2023-12-19 12:10
请教一个sqlserver 数据库 update/替换问题
同一个表有两条数据
数据1:a b c d e f g ...  数据2:a b c d e f g   ...  (大概有一百多个字段)
怎么把数据2除了ab 字段之外的数据全部更新到数据1那行

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Pojie1999.0909 发表于 2023-12-19 16:45
你可以使用SQL Server的UPDATE语句配合CASE表达式来实现这个需求。假设你的表名为`YourTable`,并且你想更新ID为1(这是数据1的行)的记录,用ID为2(这是数据2的行)的记录中的相应字段值替换除'a'和'b'字段之外的所有字段。以下是一个示例:

```sql
UPDATE YourTable
SET
    c = (SELECT c FROM YourTable WHERE ID = 2),
    d = (SELECT d FROM YourTable WHERE ID = 2),
    e = (SELECT e FROM YourTable WHERE ID = 2),
    -- ... 对所有需要更新的字段重复这个模式,除了a和b字段
    g = (SELECT g FROM YourTable WHERE ID = 2)
-- ... 更多字段
WHERE ID = 1;
```

然而,如果你有一百多个字段,手动编写这样的更新语句会非常繁琐。在这种情况下,你可能需要编写一个动态SQL脚本,根据表结构自动生成UPDATE语句。以下是一个基本的示例:

```sql
DECLARE @columns NVARCHAR(MAX);
DECLARE @updateSql NVARCHAR(MAX);

-- 获取除a和b字段之外的所有列名
SELECT @columns = STRING_AGG(QUOTENAME(c.name), ',')
FROM sys.columns c
JOIN sys.tables t ON c.object_id = t.object_id
WHERE t.name = 'YourTable' AND c.name NOT IN ('a', 'b');

-- 构建UPDATE语句
SET @updateSql = N'
UPDATE YourTable
SET ' + @columns + '
= (
    SELECT ' + @columns + '
    FROM YourTable AS t2
    WHERE t2.ID = 2
  )
WHERE ID = 1;
';

-- 执行更新语句
EXEC sp_executesql @updateSql;
```

请注意,这个动态SQL示例使用了SQL Server 2017及更高版本的`STRING_AGG`函数。如果你使用的是早期版本的SQL Server,你可能需要使用其他方法来构建列名字符串,如`FOR XML PATH`技巧。

在实际应用中,请确保正确替换 `'YourTable'` 为你的实际表名,并考虑任何可能存在的并发更新或数据一致性问题。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
ywj_1211 + 1 + 1 热心回复!

查看全部评分

weiyuhero 发表于 2023-12-19 17:09
本帖最后由 weiyuhero 于 2023-12-19 17:11 编辑

insert into  表名   a,b,c,d,e,f,g....     select  c,d,e,f,g....  from 表名    不知道你描述的是不是这个意思
 楼主| ywj_1211 发表于 2023-12-20 08:57
Pojie1999.0909 发表于 2023-12-19 16:45
你可以使用SQL Server的UPDATE语句配合CASE表达式来实现这个需求。假设你的表名为`YourTable`,并且你想更 ...

多谢指点
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 17:45

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表