问题是如何更新 SQL 中特定列的值,而不必从其他字段发送数据,我用代码解释自己。
我有以下存储过程
ALTER PROCEDURE [dbo].[spUpdateCredito]
@CreditoID int,
@PersonaID int,
@NumeroCuotas int,
@EstadoCredito int,
@MontoAprovado decimal (18,2),
@Plazo int,
@FechaCredito datetime,
@Tasa decimal (4,2)
AS
BEGIN
UPDATE Credito SET
PersonaID = @PersonaID,
NumeroCuotas = @NumeroCuotas,
EstadoCredito = @EstadoCredito,
MontoAprovado = @MontoAprovado,
Plazo = @Plazo,
FechaCredito = @FechaCredito,
Tasa = @Tasa
WHERE
CreditoID = @CreditoID
END
在例行程序中,您只需要更改 CreditStatus 但我不想更新其他列。
如果我从 sql manager 运行它,它会是这样的:
EXEC @return_value = [dbo].[spUpdateCredito]
@CreditoID = 3,
@PersonaID = NULL,
@NumeroCuotas = NULL,
@EstadoCredito = 5,
@MontoAprovado = NULL,
@Plazo = NULL,
@FechaCredito = NULL,
@Tasa = NULL
SELECT 'Return Value' = @return_value
但我不希望它让我的列为空
如果我只想更新特定列,我运行脚本
EXEC @return_value = [dbo].[spUpdateCredito]
@CreditoID = 3,
@EstadoCredito = 5
SELECT 'Return Value' = @return_value
我收到以下错误
消息 201,级别 16,状态 4,过程 spUpdateCredito,第 0 行 [Batch Start Line 2] 过程或函数“spUpdateCredito”需要参数“@PersonaID”,但未指定。
请求其他列,如何更新特定列
UPDATE IS NOT CREATE 另一个例程或脚本是使用这个。
存储的例程用于更新所有字段,因此最好创建一个新例程来仅更新该数据并根据空值在过程中传递更少的参数或条件。例如
首先,您会收到错误,因为 Sp 参数希望您向它们传递一个值,因此没有必要这样做,您必须为每个参数定义一个默认值,例如:
每个参数也是如此。现在的问题是,当您不定义参数时,它的值将
NULL
是我们不想要的,因为我们在 a 中使用它UPDATE
,一种可能性是询问IF
该值是否为 NOTNULL
,然后UPDATE
仅针对该乡村触发:这样做的问题是我们肯定会
UPDATE
为每个字段运行多个。另一种方法是在每个参数中使用一个UPDATE
but with语句ISNULL
,如果是,我们将NULL
使用相同的值进行更新:使用这两个技巧,您的 SP 可能如下所示:
还有一点评论,如果我们想要超级挑剔,我们最终会想要避免某些情况:
NULL
显然,在这两种情况下,这样做是没有意义的
UPDATE
,控制它的一种简单方法是在相同的语句中UPDATE
,向 中添加更多条件WHERE
:最后,重要的是要澄清这种更新数据的方式最终不会允许修改列以使其相同
NULL
,即例如“null”FechaCredito
,这可以解决,但逻辑必须是稍作修改,NULL
在这些情况下使用一些“强制”他的“标志” 。