SQL 服务器程序更新和合并问题

SQL Server procedure update and coalesce issue

所以我正在制作一个非常简单的更新程序,就像我以前做过的那样,但是当我 运行 通过它执行时,它不会更新。我已经看过好几次了,没有发现任何错误,为什么它不会导致更新通过它。我的手动更新工作正常,所以我想我要么遗漏了一些非常明显的东西,要么这是 coalesce 函数正在发生的事情。任何帮助都会很棒。越看越开心

USE AdventureWorks2012
GO

CREATE PROCEDURE UpdateCreditCard
@CreditCardID INT,
@CardType nvarchar(50) = NULL,
@CardNumber nvarchar(25) = NULL,
@ExpMonth tinyint = NULL,
@ExpYear smallint = NULL
AS 
BEGIN

UPDATE [Sales].[CreditCard]
SET
    @CardType  = COALESCE(@CardType,CardType),
    @CardNumber  = COALESCE(@CardNumber,CardNumber),
    @ExpMonth  = COALESCE(@ExpMonth,ExpMonth),
    @ExpYear  = COALESCE(@ExpYear,ExpYear)
FROM Sales.CreditCard
WHERE @CreditCardID = CreditCardID
END

EXECUTE UpdateCreditCard 
@CreditCardID = 19267,
@CardType = 'MasterCard',
@CardNumber = '99999999',
@ExpMonth = 4,
@ExpYear = 2025

您正在更新 variables 而不是 CreditCard table 中的 columns

.....
SET
@CardType  = COALESCE(@CardType,CardType),   -- here you are updating the @CardType variable
.....

试试这个。

CREATE PROCEDURE UpdateCreditCard
@CreditCardID INT,
@CardType nvarchar(50) = NULL,
@CardNumber nvarchar(25) = NULL,
@ExpMonth tinyint = NULL,
@ExpYear smallint = NULL
AS 
BEGIN

UPDATE [Sales].[CreditCard]
SET
    CardType  = COALESCE(@CardType,CardType),
    CardNumber  = COALESCE(@CardNumber,CardNumber),
    ExpMonth  = COALESCE(@ExpMonth,ExpMonth),
    ExpYear  = COALESCE(@ExpYear,ExpYear)
FROM Sales.CreditCard
WHERE   CreditCardID=@CreditCardID
END