gpt4 book ai didi

sql - 将字符串追加到 nvarchar 类型列中的现有值

转载 作者:行者123 更新时间:2023-12-05 09:13:11 25 4
gpt4 key购买 nike

我在 Microsoft SQL Server 2016 DB 中有一个数据库表“table_2”。

CREATE TABLE table_2
(
[created_date] [date] NULL,
[complete_hour] [int] NULL,
[col_percent] [float] NULL,
[notes] [nvarchar] (400)
)

INSERT INTO table_2
VALUES ('2017-05-31', 10, 5.8, 'A'),
('2019-06-14', 11, 9.9, NULL)

现在我想将 ', B' 附加到列注释中的值,如果列注释的值是:

  1. NOT NULL 和
  2. 不为空且
  3. 不是'B'

如果列注释具有 NULL 值,我想在列注释中添加/插入/附加“B”。

我尝试过的:

UPDATE table_2 
SET notes=notes+', '+'B'
WHERE col_percent = 5.8

但它抛出错误:

Msg 8152, Level 16, State 13, Line 14
String or binary data would be truncated.

当我尝试

UPDATE table_2 
SET notes=notes+', '+'B'
WHERE col_percent = 9.9

它显示 (1 行受影响) 但我看到相同的数据和列注释在第二行中仍然有 NULL。

我环顾四周,似乎将列注释的数据类型从 nvarchar 更改为 varchar(50) 将解决此问题。 (我已经测试过了)但在实际情况下我无法更改数据类型。

问题:如何在不更改列注释的数据类型的情况下执行此操作?

更新:将注释列声明为[notes] [nvarchar] (400)。这解决了列注释中非空值的问题。

但对于 NULL 值(如 col_percent = 9.9),它显示 (1 row affected) 但数据未更改。

Zeina 的解决方案会在注释列为 NULL 时进行更新,但它还会添加前导逗号。

我最终使用的解决方案(可能有比这更好的解决方案):

UPDATE table_2  
SET notes = CASE
WHEN notes = 'B' THEN 'B'
WHEN notes IS NULL THEN 'B'
WHEN notes = '' THEN 'B'
ELSE notes+', '+'B'
END
WHERE col_percent = 5.8

最佳答案

必须更改笔记的类型。目前,您已将 notes 定义为:

[notes] [nvarchar] NULL

您没有包含长度,因此 SQL Server 使用默认长度。在此上下文中,默认长度为 1,因此您只能在列中存储一个字符。

然后要处理 NULL 值,请使用 CASE:

UPDATE table_2
SET notes = (CASE WHEN notes IS NOT NULL THEN notes + ', ' +'B'
END)
WHERE col_percent = 9.9;

或者,更好的是:

UPDATE table_2
SET notes = notes + ', ' +'B'
WHERE col_percent = 9.9 AND notes IS NOT NULL;

关于sql - 将字符串追加到 nvarchar 类型列中的现有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56604321/

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