目前,我有以下UPDATE语句:

UPDATE Customer
SET Name = @Name,
    Age = @Age,
    Email = @Email
    ...


现在,仅在提供值的情况下,才需要在UPDATE语句中包括列。否则,请勿在UPDATE语句中包括该列。

因此,从概念上讲,可能是这样的:

UPDATE Customer
SET
    IF LEN(@Name) > 0 THEN Name = @Name,
    IF LEN(@Age) > 0 THEN Age = @Age,
    IF LEN(@Email ) > 0 THEN Email = @Email
    ...


有什么办法可以做到这一点?我正在考虑动态查询,但是更新列的列表非常长,因此需要完成大量工作才能更改为动态查询,如下所示:

SET @SQL = 'UPDATE Customer SET '

IF LEN(@Name) > 0
    SET @SQL = @SQL + 'Name = @Name,'

IF LEN(@Age) > 0
    SET @SQL = @SQL + 'Age= @Age,'

最佳答案

那这样的东西呢?

UPDATE Customer SET
    [Name] = CASE WHEN ISNULL(@Name, '') = '' THEN [Name] ELSE @Name END
    ,Age = CASE WHEN ISNULL(@Age, '') = '' THEN Age ELSE @Age END
    ,Email = CASE WHEN ISNULL(@Email, '') = '' THEN Email ELSE @Email END
    ...

10-08 07:57
查看更多