目前,我有以下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
...