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