需要SQL server中条件更新存储过程的示例

需要SQL server中条件更新存储过程的示例,sql,database,stored-procedures,Sql,Database,Stored Procedures,我刚刚开始使用数据库,有两个基本问题 我有一个通用的更新存储过程,它更新表的所有列 但是我需要使它有条件,当参数为NULL时,它不会设置 用法:我想将其用作单个SP来更新列的任何子集,C#的调用程序将填充相应的参数值,并将其他参数保留为NULL 二, 在“更新所选记录”的情况下,我是否需要在存储过程中使用锁定 为什么??操作本身不是锁定的和事务性的吗 当我需要更新所选(条件)记录,然后返回更新的记录时,我发现同样的问题出现了。如果我正确理解了这个问题,为什么不能从sql server SP动态构

我刚刚开始使用数据库,有两个基本问题

  • 我有一个通用的更新存储过程,它更新表的所有列
  • 但是我需要使它有条件,当参数为NULL时,它不会设置

    用法:我想将其用作单个SP来更新列的任何子集,C#的调用程序将填充相应的参数值,并将其他参数保留为NULL

    二,

    在“更新所选记录”的情况下,我是否需要在存储过程中使用锁定

    为什么??操作本身不是锁定的和事务性的吗


    当我需要更新所选(条件)记录,然后返回更新的记录时,我发现同样的问题出现了。

    如果我正确理解了这个问题,为什么不能从sql server SP动态构建查询,并使用SP\u sqlexecute呢。所以,当您构建查询时,您可以确保只有具有值的列得到了更新


    这是否回答了您的问题?

    如果我正确理解了这个问题,为什么您不能从sql server SP动态构建一个查询,并使用SP\u sqlexecute。所以,当您构建查询时,您可以确保只有具有值的列得到了更新

    这是否回答了您的问题?

    更新表格 设置a=当@a为空时的大小写,然后设置else@a结束 其中id=@id

    EXEC'update table set'+@update+'其中id='+@id

    一次有条件地更新一列


    对于我来说,第一个选项通常更可取,因为它通常足够有效,并且您不需要担心字符串转义的问题 设置a=当@a为空时的大小写,然后设置else@a结束 其中id=@id

    EXEC'update table set'+@update+'其中id='+@id

    一次有条件地更新一列



    对于我来说,第一个选项通常更可取,因为它通常效率很高,而且您不需要担心字符串转义

    您可以详细说明如何生成动态查询吗。有用的信息。但是我们大多只使用存储过程,不知道动态查询的结果如何。您能详细介绍一下如何生成动态查询吗。有用的信息。但我们大多只尝试使用存储过程,不知道动态操作将如何进行。如果NULL=“不更新”,当您想将一列设置为NULL,而该列以前包含一个值时,您将如何处理这种情况?@Ronnis有效点。我不知道怎么处理,有人吗?回到最初的目标,我不想写这么多存储过程,比如每更新一列就写一个。所以我想要一个通用的解决方案,它可以是任何东西(我所说的NULL只是我脑海中的一个例子),如果NULL=“不更新”,当你想将一列设置为NULL,而该列以前持有一个值时,你会如何处理这种情况?@Ronnis Valid point。我不知道怎么处理,有人吗?回到最初的目标,我不想写这么多存储过程,比如每更新一列就写一个。所以我想要一个通用的解决方案,它可以是任何东西(我所说的空的东西只是我脑海中的一个例子),回到最初的目标,我不想写这么多存储过程,就像每个列更新一个一样。所以我想要任何通用的标准溶液。你能帮忙吗?@Munish你能改进你的问题,把你想要的功能的psuedo代码包括进去吗。一般来说,这些解决方案效果良好。但是,您不能为procs使用泛型(params)样式的参数,因此需要相当多的编码。除非你写一个写一个proc的proc,但这太离奇了,无法回到最初的目标,我不想写这么多存储的proc,就像每个列更新一个一样。所以我想要任何通用的标准溶液。你能帮忙吗?@Munish你能改进你的问题,把你想要的功能的psuedo代码包括进去吗。一般来说,这些解决方案效果良好。但是,您不能为procs使用泛型(params)样式的参数,因此需要相当多的编码。除非你写了一个写了一个proc的proc,但那太花哨了