Sql server SQL Server过程更新和合并问题

Sql server SQL Server过程更新和合并问题,sql-server,stored-procedures,sql-server-2012,updates,coalesce,Sql Server,Stored Procedures,Sql Server 2012,Updates,Coalesce,所以我正在做一个非常简单的更新过程,就像我以前做的一样,但是当我通过它运行执行时,它不会更新。我已经查看了好几次,没有发现任何错误,为什么它不会导致更新通过它。我的手动更新工作正常,所以我想我要么错过了一些非常明显的东西,要么这是与coalesce函数有关的东西。任何帮助都会很好。眼睛越多越开心 USE AdventureWorks2012 GO CREATE PROCEDURE UpdateCreditCard @CreditCardID INT, @CardType nvarchar(50

所以我正在做一个非常简单的更新过程,就像我以前做的一样,但是当我通过它运行执行时,它不会更新。我已经查看了好几次,没有发现任何错误,为什么它不会导致更新通过它。我的手动更新工作正常,所以我想我要么错过了一些非常明显的东西,要么这是与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


您正在更新
信用卡
表中的
变量
而不是

.....
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

运行
从Sales.CreditCard中选择*时会发生什么情况,其中creditcardd=19267
。检查是否有行returnedIt只返回旧数据,而没有返回更新的数据。先生,你太棒了,我一遍又一遍地查看它,没有意识到我把变量更新了,而不是列。这很有魅力。我将不得不注意那些愚蠢的错误。@MikeyZ-每个人都会犯这样的错误。不需要在
SO中使用sir这个词
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