请教一个sqlserver 数据库 update/替换的问题
请教一个sqlserver 数据库 update/替换问题同一个表有两条数据
数据1:a b c d e f g ...数据2:a b c d e f g ...(大概有一百多个字段)
怎么把数据2除了ab 字段之外的数据全部更新到数据1那行 你可以使用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'` 为你的实际表名,并考虑任何可能存在的并发更新或数据一致性问题。 本帖最后由 weiyuhero 于 2023-12-19 17:11 编辑
insert into表名 a,b,c,d,e,f,g.... selectc,d,e,f,g....from 表名 不知道你描述的是不是这个意思 Pojie1999.0909 发表于 2023-12-19 16:45
你可以使用SQL Server的UPDATE语句配合CASE表达式来实现这个需求。假设你的表名为`YourTable`,并且你想更 ...
多谢指点
页:
[1]