Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 存储过程更新需要传递所有参数才能工作_Sql Server_Stored Procedures_Isnull - Fatal编程技术网

Sql server 存储过程更新需要传递所有参数才能工作

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

嗨,我一直在尝试制作这个存储过程,以便它可以更新单个参数,而不必放置所有参数。如果传递的值为空或null,我希望前面的值保持不变。正如我现在所拥有的,我必须传递所有的参数,以使程序工作。 请帮忙,提前谢谢

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