首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Sql server存储过程

Sql server存储过程
EN

Stack Overflow用户
提问于 2010-02-23 20:36:40
回答 3查看 723关注 0票数 1

我必须编写一个更新存储过程。我将询问所有列的参数(除了id)。用户不会一直发送所有的参数。他想要发送参数值为NULL,所以不要更新该列,他想要更新的列将是有效值。我该如何为此编写一个已存储的proc。基本上,我必须检查每个参数值,如果参数值不为空,则只更新该列。提前感谢!!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-23 20:55:44

如果该列为NOT NULL,则使用COALESCE将该列设置为新值,否则将该列设置为相同的原始值:

代码语言:javascript
运行
复制
UPDATE  MyTable

SET     MyColumn1 = COALESCE(@MyColumn1, MyColumn1),
        MyColumn2 = COALESCE(@MyColumn2, MyColumn2),
        MyColumn3 = COALESCE(@MyColumn3, MyColumn3)

WHERE   ID = @ID
票数 4
EN

Stack Overflow用户

发布于 2010-02-23 20:57:52

尝试:

代码语言:javascript
运行
复制
CREATE PROCEDURE YourUpdate
(
    @Param_PK    int
   ,@Param1      varchar(10)=NULL
   ,@Param2      int=NULL
   ,@Param3      datetime=NULL
)


UPDATE YourTable
    SET col1=COALESCE(@Param1,col1)
       ,col2=COALESCE(@Param2,col2)
       ,col3=COALESCE(@Param3,col3)
    WHERE PK=@Param_PK

go3
票数 2
EN

Stack Overflow用户

发布于 2010-02-23 20:38:30

代码语言:javascript
运行
复制
Create Procedure MyProc ( @Param1 int,
@Param2 varchar(20),
@Param3 int = NULL)
As
Begin

-- the sp

End

有关如何指定默认值,请参阅@Param3。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2318095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档