请问SQL server 中如何更新字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问SQL server 中如何更新字段相关的知识,希望对你有一定的参考价值。

一个表A,里面有一个主键id,字段no,no里大约有3000多数据,都是四位数,如2154,5689,5696等等,我想要更新这些数据,在这些字段前加上0000,使每位数据都是8位的,如00005985,00003625等,请问sql语句应当怎样写,谢谢!!

no是什么类型的?如果是nvarchar或者varchar,并且字段长度在8字节或8字节以上,可以直接更新。
update A
set no='0000'+no
如果不是字符串类型的,那需要修改字段类型
修改语句为
alter table A
alter column no varchar(8)
修改以后再执行更新
参考技术A 若是外部数据源导入临时数据表,四位数被置为numeric型,需转换为字符型,关键是先得转为整型,再转为字符。
replace A
set no = '0000' + cast(cast(no as bigint) as varchar)
以上为Transact-SQL+MSSQL2005环境。
(MSSQL2005中的bug,CAST函数常常不起作用,需重新连接服务器才能解决)
祝你成功!
参考技术B 我写一个 你看行不行

use A

repl all no with "0000"+str(no)

或者

updete A set no="0000"+str(no)

SQL Server 更新字段最大值数据子集

【中文标题】SQL Server 更新字段最大值数据子集【英文标题】:SQL Server Update Field Max Value Subset of Data 【发布时间】:2017-11-14 14:14:39 【问题描述】:

我正在尝试根据表中的数据子集更新文件。如果一个装配需要 3 个具有不同到货日期的组件,但只能在所有三个到货后才能组装,我如何更新已完成的字段? Complete 字段需要是类似程序集之间的 DateAdd 的 Max,但我不知道如何定义 WHERE 语句以基于程序集进行比较。

样本数据

SN      Assembly  Arrival       ProcessingDays
1000    A1        2017-07-03    2               
1001    A1        2017-06-02    2
1002    A1        2017-05-01    2
1003    A2        2017-12-15    2  
1004    A3        2017-07-03    2
1005    A3        2017-06-02    2
1006    A3        2017-05-01    2

期望的输出

SN      Assembly  Arrival       ProcessingDays  Complete
1000    A1        2017-07-03    2               2017-07-05
1001    A1        2017-06-02    2               2017-07-05
1002    A1        2017-05-01    2               2017-07-05
1003    A2        2017-12-15    2               2017-12-17
1004    A3        2017-09-03    2               2017-09-05
1005    A3        2017-08-02    2               2017-09-05
1006    A3        2017-07-01    2               2017-09-05

【问题讨论】:

【参考方案1】:

我不知道您是真的要更新表还是只生成Complete 列,但以下 CTE 应该是正确的。与您的问题有关的诀窍是,除了最大日期之外,还必须确定每个装配的最新记录的处理天数。为此,我在下面使用了两步 CTE。

WITH cte1 AS (
    SELECT SN, Assembly, Arrival, ProcessingDays,
        ROW_NUMBER() OVER (PARTITION BY Assembly ORDER BY Arrival DESC) rn
    FROM yourTable
),
cte2 AS (
    SELECT t1.SN, t1.Assembly, t1.Arrival, t1.ProcessingDays, t1.Complete,
        DATEADD(dd, t2.ProcessingDays, t2.Arrival) AS NewComplete
    FROM yourTable t1
    INNER JOIN cte1 t2
        ON t1.Assembly = t2.Assembly
    WHERE
        t2.rn = 1
)

CTE 在很多方面都非常有用,包括使用复杂逻辑轻松更新表,但方式简单。现在我们可以更新您的Complete 列如下:

UPDATE cte2
SET Complete = NewComplete;

这是一个全面更新,您的问题似乎暗示了您想要什么,但如果有意义的话,您可以在上述更新中添加 WHERE 子句。

【讨论】:

我认为它必须是一个更新命令,因为这些字段存在并且会不断更新 那么让我更新我的答案。我会假设你的表已经有一个空的Complete 列。 出现错误,我尝试了分号和逗号的各种组合:“Msg 319, Level 15, State 1, Line 248 关键字'with'附近的语法不正确。如果此语句是公用表表达式、xmlnamespaces 子句或更改跟踪上下文子句,之前的语句必须以分号结束。" 我的代码没有任何问题。我假设您的表名为yourTable,但仅此而已。确保一起运行所有内容。我的意思是你应该突出显示从WITH cte1 AS ... 到更新的所有内容,然后一起运行。 我认为问题在于我在脚本的前面调用了 cte,所以它把它扔掉了,我把它分成了更小的脚本,它似乎可以工作。谢谢!

以上是关于请问SQL server 中如何更新字段的主要内容,如果未能解决你的问题,请参考以下文章

sql server,如何给表和字段添加备注,并更新备注,以及查询备注

mssql sql server 系统更新,如何正确的增加表字段

SQL Server中的聚合函数都有哪些?

SQL Server 更新字段最大值数据子集

sqlserver如何实现本周过生日的用户

SQL Server 在查询结果增加自定义的三个字段?如何搞?