Sql server 存储过程更新需要传递所有参数才能工作
嗨,我一直在尝试制作这个存储过程,以便它可以更新单个参数,而不必放置所有参数。如果传递的值为空或null,我希望前面的值保持不变。正如我现在所拥有的,我必须传递所有的参数,以使程序工作。 请帮忙,提前谢谢Sql server 存储过程更新需要传递所有参数才能工作,sql-server,stored-procedures,isnull,Sql Server,Stored Procedures,Isnull,嗨,我一直在尝试制作这个存储过程,以便它可以更新单个参数,而不必放置所有参数。如果传递的值为空或null,我希望前面的值保持不变。正如我现在所拥有的,我必须传递所有的参数,以使程序工作。 请帮忙,提前谢谢 create procedure U_DIS_UpdateProject ( @projectID CHAR(4), @projectName varchar(50), @firmName varchar(50), @fundedbudget decimal(16,2), @startDa
create procedure U_DIS_UpdateProject
(
@projectID CHAR(4),
@projectName varchar(50),
@firmName varchar(50),
@fundedbudget decimal(16,2),
@startDate date,
@status varchar(25),
@projectTypeCode char(5),
@projectManager char(8)
) as
begin
UPDATE Project
SET
projectName =ISNULL(@projectName,projectName),
firmName =ISNULL(@firmName,firmName),
fundedbudget =ISNULL(@fundedbudget,fundedbudget),
startDate =ISNULL(@startDate,startDate),
status =ISNULL(@status,status),
projectTypeCode =ISNULL(@projectTypeCode,projectTypeCode),
projectManager =ISNULL(@projectManager,projectManager)
WHERE @projectID=projectID
结束
去
exec U_DIS_UpdateProject@projectd='A003',@projectName='Le Chateau',@firmName='Gotham Restaurants'
go我只会使用CASE语句来检查每个语句。它与示例中的内容类似,但也会捕获空字符串
create procedure U_DIS_UpdateProject
(
@projectID CHAR(4),
@projectName varchar(50),
@firmName varchar(50),
@fundedbudget decimal(16,2),
@startDate date,
@status varchar(25),
@projectTypeCode char(5),
@projectManager char(8)
) as
begin
UPDATE Project
SET
projectName =
(CASE
WHEN ISNULL(@projectName,'')='' THEN projectName
ELSE @projectName
END),
firmName =
(CASE
WHEN ISNULL(@firmName,'')='' THEN firmName
ELSE @firmName
END),
fundedbudget =
(CASE
WHEN ISNULL(@fundedbudget,'')='' THEN fundedbudget
ELSE @fundedbudget
END),
startDate =
(CASE
WHEN ISNULL(@startDate,'')='' THEN startDate
ELSE @startDate
END),
status =
(CASE
WHEN ISNULL(@status,'')='' THEN [status]
ELSE @status
END),
projectTypeCode =
(CASE
WHEN ISNULL(@projectTypeCode,'')='' THEN projectTypeCode
ELSE @projectTypeCode
END),
projectManager =
(CASE
WHEN ISNULL(@projectManager,'')='' THEN projectManager
ELSE @projectManager
END)
WHERE @projectID=projectID
您确定必须输入所有参数吗?我想你不必这么做。您应该能够只更新projectd、projectName、firmName而不指定其他列SQL是大多数RDBMS实现的标准。SQL Server是Microsoft的RDBMS产品。您不必传递所有参数,但是如果您选择传递所有参数,请谨慎使用上述参数默认值或值检查。如果所有参数都未通过,如何编写update语句?不确定问题是april,但update语句不要求设置表中的每一列,如果需要动态更新哪些列,您可以编写“red”代码或dynmaicsql来构建update语句,并使用execute语句调用字符串。请参阅过程部分中的动态sql