我正在寻找一个SQL语句或存储过程来将一行中的列子集的值重置为其默认值(如此定义)或者为null。行中还有其他列我不想重置,否则我可以删除该行并创建一个新的行,该行将使用各种默认值进行初始化...这就是我想要的效果,但仅限于列的特定子集。
从概念上讲,我正在寻找
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的解决方案就可以了。
答案 0 :(得分:8)
您可以使用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)