gpt4 book ai didi

sql - 在 SQL 中将列的子集重置为其默认值?

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

我正在寻找一个 SQL 语句或存储过程来将行中列子集的值重置为它们的默认值(如此定义)或为空。该行中还有其他列我不想重置,否则我可以删除该行并创建一个新的列,该列将使用各种默认值进行初始化...这就是我想要的效果,但仅适用于列的特定子集。

从概念上讲,我正在寻找

UPDATE eirProj 
SET <all columns named like 'paf%'> TO THEIR DEFAULT OR NULL
WHERE prjId=@prjId

或至少

UPDATE eirProj 
SET pafAuth=<pafAuth default or NULL>, pafComp=<pafComp default or NULL>, paf...
WHERE prjId=@prjId

我试图避免在两个地方(表定义和此重置代码)冗余地对默认值进行硬编码。理想情况下但不太重要的是,我想避免对列名进行硬编码,这样即使通过添加、删除或重命名列来更改子集,它仍然可以工作。

我在 SQL Server 中工作,如果这是唯一的方法,那么特定于 T-SQL 的解决方案是可以的。

最佳答案

你可以使用default关键字

CREATE TABLE dbo.eirProj
(
paf1 INT DEFAULT(100),
paf2 INT NULL
)

INSERT INTO dbo.eirProj
VALUES (1,
1)

UPDATE dbo.eirProj
SET paf1 = DEFAULT,
paf2 = DEFAULT

SELECT *
FROM dbo.eirProj

返回

paf1        paf2
----------- -----------
100 NULL

除非您使用动态 SQL 生成上述内容,否则无法对所有名为 paf% 的列执行此操作。

DECLARE @Script NVARCHAR(MAX)

SELECT @Script = ISNULL(@Script + ',', '') + QUOTENAME(name) + ' =default'
FROM sys.columns
WHERE object_id = object_id('dbo.eirProj')
AND name LIKE '%paf%'

IF ( @@ROWCOUNT = 0 )
RETURN

SET @Script = 'UPDATE dbo.eirProj SET ' + @Script

EXEC(@Script)

关于sql - 在 SQL 中将列的子集重置为其默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5515916/

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